首页 > 解决方案 > pandas- 为列中每个唯一字符串/组的新计算行

问题描述

我有一个df像这样的数据框:

GROUP  TYPE  COUNT
A       1     5
A       2     10
B       1     3
B       2     9
C       1     20
C       2     100

我想为每个组添加一行,以便新行计算每个ala的COUNTwhereTYPE等于 2 和COUNTwhere等于 1 的商:TYPEGROUP

GROUP  TYPE  COUNT
A       1     5
A       2     10
A             .5
B       1     3
B       2     9
B             .33
C       1     20
C       2     100
C             .2

提前致谢。

标签: pythonpandasdataframefor-loop

解决方案


df2 = df.pivot(index='GROUP', columns='TYPE', values='COUNT')
df2['div'] = df2[1]/df2[2]
df2.reset_index().melt('GROUP').sort_values('GROUP')

输出:

  GROUP TYPE       value
0     A    1    5.000000
3     A    2   10.000000
6     A  div    0.500000
1     B    1    3.000000
4     B    2    9.000000
7     B  div    0.333333
2     C    1   20.000000
5     C    2  100.000000
8     C  div    0.200000

我的方法是通过旋转来重塑数据框,因此每种类型都有自己的列。然后分割很容易,然后通过熔化将其重塑回原始形状。在我看来,这也是一个非常易读的解决方案。

当然,如果你更喜欢np.nan作为div一种类型,你可以很容易地替换它,但我不确定这是否是你想要的。


推荐阅读