我有一个看起来像这样的数据框
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列以及groupby列G的行求和。所以当E列存在时,我只使用
df.groupby('G')['A', 'C', 'E'].sum()
但是当E不存在时(例如在第一个数据帧中),它将不起作用。
即使缺少一列,我该怎么做才能求和?
最佳答案
您可以将希望求和的列存储在列表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
关于python - python-列总和,即使不是全部,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49891600/