我有一个包含五列的数据框:G1、G2、G3、G4 和税收。我按 G 和 Tax 对每个 G 列进行分组,以计算有多少行的值为 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 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,你可以大大简化你的逻辑,使用:
df.set_index('Tax').filter(like='G').eq(1).groupby(level='Tax').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