我有一个看起来像这样的 pandas DataFrame:
Pr(X,O)
(H, H, H, H) 0.042743
(H, H, H, C) 0.003664
(H, H, C, H) 0.073274
(H, H, C, C) 0.021982
(H, C, H, H) 0.005234
(H, C, H, C) 0.000449
(H, C, C, H) 0.031403
(H, C, C, C) 0.009421
(C, H, H, H) 0.113982
(C, H, H, C) 0.009770
(C, H, C, H) 0.195398
(C, H, C, C) 0.058619
(C, C, H, H) 0.048849
(C, C, H, C) 0.004187
(C, C, C, H) 0.293096
(C, C, C, C) 0.087929
不幸的是,这是由太大而无法在此问题中发布的代码生成的。请注意,我将两个元素(H 和 C)的所有可能性都列为四个序列作为 DataFrame 索引。我的问题是,将每个位置的每个元素的所有数字相加的最佳方法是什么?
例如。考虑位置 0 和元素 H。在这里我总结一下 0.042743 + 0.003664 + 0.073274 + 0.021982 + 0.005234 + 0.000449 + 0.031403 + 0.009421 等于 0.1887。然后我想在相同位置对 C 执行相同的操作,然后在所有位置再次执行。 (显然我可以接受补码,但我想在未来用更多的两个字母字母表再次这样做)。
理想的结果是另一个 pandas DataFrame,它看起来像这样:
请您参考如下方法:
我尝试将 itertools.product 的结果作为 MultiIndex 来实现。
index = pd.MultiIndex.from_tuples(itertools.product(('H', 'C'), repeat=4))
然后我们按不同级别分组,并将它们连接起来。
pd.concat( [df.groupby(level=[i]).sum().rename(columns={'Pr(X,O)': i}) for i in range(4)] , axis=1)
0 1 2 3
C 0.81183 0.480568 0.771122 0.196021
H 0.18817 0.519432 0.228878 0.803979
编辑
感谢 MaxU 的评论,无需将对索引进行少量操作的 MultiIndex 作为系列。
