gpt4 book ai didi

python - Pandas DataFrame 如何按指定列的值对行进行分组(透视?),但保留原始索引?

转载 作者:行者123 更新时间:2023-12-01 12:02:27 24 4
gpt4 key购买 nike

我正在尝试使用 Pandas 实现变量消除算法。如果有人熟悉求和步骤,给定一个表格,其中 a、b、c 是变量(不一定是 bool 值),f 是给定这些变量值的某个函数(因子)。

       a      b      c      f
0 True True True 0.015
1 True True False 0.035
2 True False True 0.270
3 True False False 0.180
4 False True True 0.030
5 False True False 0.070
6 False False True 0.240
7 False False False 0.160

我想总结 f所有行的 s,其中 (a,c)=(T,T) , 还有 f所有行的 s,其中 (a,c)=(T,F) , (F,T) , (F,F) .结果看起来像
       a     c     f
0 True True 0.285
1 True False 0.215
2 False True 0.27
3 False False 0.23

因此名称为“sum-out ( b)”。

我能得到的最接近的是使用 pd.pivot_table(df, index=df.index.values, columns=['a', 'c'], values='f', aggfunc=np.sum, fill_value=0).sum()返回
a      c
False False xxx
True xxx
True False xxx
True xxx

另一个 unstack可以给我们
c      False  True
a
False xxx xxx
True xxx xxx

这仍然不是我想要的。

请注意,我可以有任意多个变量,以及任意多个变量来求和(或保留)。所以虽然在这种情况下我可以做 pd.pivot_table(df, index=<some of the var left, e.g. a>, columns=<other var left, e.g. c>, values='f', aggfunc=np.sum)为了得到相同的结果,在其他情况下可能只剩下一个变量,或者太多了。

变量可能不是 bool 类型,但它们应该具有有限和离散域。

另请注意,我在这里的索引只是虚拟的无意义索引。通过“保持原始索引”,我的意思是让它们保持虚拟,但不知何故只能沿着 axis=0 聚合。 .

此外,如果有人可以提出更好的多维数组类数据结构来完成这项工作,也可以。

最佳答案

您可以像这样使用 groupby 和 agg 函数。

df.groupby(['a','c'])['f'].agg('sum').reset_index()

关于python - Pandas DataFrame 如何按指定列的值对行进行分组(透视?),但保留原始索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60571138/

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