gpt4 book ai didi

python - 将行和列总和应用于 Pandas 数据框中的单元格

转载 作者:太空宇宙 更新时间:2023-11-03 12:56:15 26 4
gpt4 key购买 nike

有人可以建议一种简单的方法来实现下面的结果。

数据:

data = np.array([
['','A','B'],
['Yes',44,19],
['No',116,128]
])

df = pd.DataFrame(data=data[1:,1:],
index=data[1:,0],
columns=data[0,1:])

df:
A B
Yes 44 19
No 116 128

对于每个单元格,我想将行总计的总和乘以列总计,然后除以表总计(此时我不关心调用的值),所以单元格 Yes\A 会是:

63 * 160/307 = 32.83

这些值来自:

63 = 44 + 19

160 = 44 + 116

307 = 44 + 19 + 116 + 128

有什么简单的方法吗?

谢谢

编辑。完整的期望结果(此外,无论数据框中的行数和列数如何,此方法都应该有效......可能会有所不同)

32.83    30.17
127.17 116.83

最佳答案

您可以使用 DataFrame.dotsum Dataframes 使用 Series 创建,作者 to_frameT :

df = df.astype(int)

print (df.sum(1).to_frame())
0
Yes 63
No 244

print (df.sum().to_frame())
0
A 160
B 147

print (df.sum(1).to_frame().dot(df.sum().to_frame().T).div(df.sum().sum()))
A B
Yes 32.833876 30.166124
No 127.166124 116.833876

时间:

np.random.seed(1)
df = pd.DataFrame(np.random.randint(10, size=(10,10)))
df.columns = list('ABCDEFGHIJ')
print (df)

In [293]: %timeit (df.apply(lambda r: df.sum()[r.name]*df.sum(1)[r.index]/df.sum().sum()))
100 loops, best of 3: 14.1 ms per loop

In [294]: %timeit (df.sum(1).to_frame().dot(df.sum().to_frame().T).div(df.sum().sum()))
1000 loops, best of 3: 1.19 ms per loop

关于python - 将行和列总和应用于 Pandas 数据框中的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40786255/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com