我有一个看起来像这样的数据框
A B C D G
0 9 5 7 6 1
1 1 4 7 3 1
2 8 4 1 3 1
由此产生:
df = pd.DataFrame(np.random.randint(0,10,size=(10, 4)), columns=list('ABCD'))
x=np.array([[1,2]])
df['G'] = np.repeat(x,5)
假设有时某个列' E'存在,有时它不依赖于数据的时间范围。
所以有时我们有
A B C D E G
0 9 5 7 6 2 1
1 1 4 7 3 3 1
2 8 4 1 3 4 1
所以无论哪种方式,我都希望对A,C和E列以及G组的行进行求和。所以当E列存在时,我只是使用
df.groupby('G')['A', 'C', 'E'].sum()
但是当E不存在时,就像在第一个数据帧中一样,它不起作用。
即使缺少某列,我还需要做什么才能总结?
答案 0 :(得分:2)
您可以将要汇总的列存储在列表sum_cols = list('ACE')
中,然后将您正在使用的任何DataFrame与此列表相交。
df.groupby('G')[df.columns.intersection(sum_cols)].sum()
<强>演示强>
>>> df = pd.DataFrame(np.random.randint(0, 10, (2, 5)),
columns=list('ABCDG'))
>>> df
A B C D G
0 9 5 9 2 6
1 3 1 1 1 3
>>> sum_cols = list('ACE')
>>> df.groupby('G')[df.columns.intersection(sum_cols)].sum()
A C
G
3 3 1
6 9 9
>>> df['E'] = [100, 200]
>>> df.groupby('G')[df.columns.intersection(sum_cols)].sum()
A C E
G
3 3 1 200
6 9 9 100