我需要规范化一个包含全部为零的数据框中的行。例如:
df= pd.DataFrame({"ID": ['1', '2', '3', '4'], "A": [1, 0, 10, 0], "B": [4, 0, 30, 0]})
ID A B
1 1 4
2 0 0
3 10 30
4 0 0
我的方法是首先排除零值行,然后使用以下方法将非零子集归一化:
df1 = df[df.sum(axis=1) != 0]
df2 = df[df.sum(axis=1) == 0]
sum_row = df1.sum(axis=1)
df1.div(sum_row, axis=0)
然后将两个数据帧按以下方式连接起来:
pd.concat([df1, df2]).reset_index()
然而,当我应用 df1.div(sum_row, axis=0)
时,出现了以下错误:
ValueError: operands could not be broadcast together with shapes (6,) (2,)
请问如何解决这个错误,是否存在更加高效的方法。谢谢!
编辑:预期生成的数据框应该是这样的:
ID A B
1 0.2 0.8
2 0 0
3 0.25 0.75
4 0 0