我有一个数据帧,它有五列:G1、G2、G3、G4和Tax。我对每个G列按G和Tax进行分组,以计算有多少行的值为1。但每个G的结果维度是不同的,因为有些G只有0个值。
这是我的代码:
self.instance.df.groupby(["G1", "Tax"]).size().drop(0) self.instance.df.groupby(["G2", "Tax"]).size().drop(0)
我将删除索引0,因为我只需要1个值。
初始数据帧:
G1 G2 G3 G4 Tax 0 0 1 0 0 1.1 1 1 1 0 1 1.1 2 1 1 0 0 1.2 3 0 1 0 1 1.3
我期待的结果是:
G1 Tax 1 1.1 5 1.2 7 1.5 3 1.7 0
我得到的结果是:
G1 Tax 1 1.1 5 1.2 7 1.5 3
IIUC,您可以通过执行单个 groupby :
groupby
out = (df.set_index('Tax').filter(like='G').eq(1) .groupby(level='Tax').sum() )
或
cols = ['G1', 'G2', 'G3', 'G4'] out = df.groupby('Tax')[cols].agg(lambda x: x.eq(1).sum())
如果您的值仅为0/1:
cols = ['G1', 'G2', 'G3', 'G4'] out = df.groupby('Tax')[cols].sum()
实例
# input G1 G2 G3 G4 Tax 0 0 1 0 0 A 1 1 1 0 1 A 2 1 1 0 0 A 3 0 1 0 1 B # output G1 G2 G3 G4 Tax A 2 3 0 1 B 0 1 0 1