【发布时间】:2023-03-25 00:54:01
【问题描述】:
我正在尝试对多组列进行分组,以计算或汇总 pandas 数据框中的行
我已经检查了很多问题,我发现最相似的是这个 >Groupby sum and count on multiple columns in python,但是,据我所知,我必须做很多步骤才能达到我的目标。并且也在看这个link
例如,我有下面的数据框:
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()