python-列的总和列表,即使不是所有列
我有一个像这样的数据框python-列的总和列表,即使不是所有列,python,pandas,numpy,Python,Pandas,Numpy,我有一个像这样的数据框 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 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\u cols=list('ACE')
,然后与您使用的任何数据帧相交
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