我想将几组列分组以计算或汇总pandas数据框中的行。
我已经检查了很多问题,最相似的是这一个 > 在Python中对多个列进行分组求和和计数, 但是,根据我所理解的,我必须执行许多步骤才能达到我的目标。我还在看这个 链接
例如,我有以下数据框:
import numpy as np
df = pd.DataFrame(np.random.randint(0,5,size=(5, 7)), columns=["grey2","red1","blue1","red2","red3","blue2","grey1"])
grey2 red1 blue1 red2 red3 blue2 grey1
0 4 3 0 2 4 0 2
1 4 2 0 4 0 3 1
2 1 1 3 1 1 3 1
3 4 4 1 4 1 1 1
4 3 4 1 0 3 3 1
我希望在这里按颜色对所有列进行分组,例如,我期望的是:
如果我求和这些数字,
blue 15
grey 22
red 34
如果我计算( x > 0 ),那么我会得到,
blue 7
grey 10
red 13
这是我目前所取得的成果,现在我需要对它们进行总结,然后用结果创建一个数据框,但如果我有100个组,这将非常耗时。
pd.pivot_table(data=df, index=df.index, values=["red1","red2","red3"], aggfunc='sum', margins=True)
red1 red2 red3
0 3 2 4
1 2 4 0
2 1 1 1
3 4 4 1
4 4 0 3
ALL 14 11 9
pd.pivot_table(data=df, index=df.index, values=["red1","red2","red3"], aggfunc='count', margins=True)
但这里也在计算零:
red1 red2 red3
0 1 1 1
1 1 1 1
2 1 1 1
3 1 1 1
4 1 1 1
All 5 5 5
我不确定如何修改函数以获得我的结果,而且我已经花了好几个小时,希望你能帮忙。
注意: 在这个例子中,我只使用颜色来简化情况,但我可能有许多列,它们被称为col001到col300等等... 因此,这些组可能是:
blue = col131, col254, col005
red = col023, col190, col053
等等……
df.groupby(df.columns.str.replace('\d+', ''),axis=1).sum().sum()
- ansev