python - 列的总和列表,即使不是全部

时间:2018-04-18 05:09:31

标签: 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  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不存在时,就像在第一个数据帧中一样,它不起作用。

即使缺少某列,我还需要做什么才能总结?

1 个答案:

答案 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