根据列名称中的模式对列进行求和

时间:2018-04-26 08:50:23

标签: python pandas

让我们从非常简化的抽象示例开始,我有一个像这样的数据框:

import pandas as pd

d = {'1-A': [1, 2], '1-B': [3, 4], '2-A': [3, 4], '5-B': [2, 7]}
df = pd.DataFrame(data=d)

     1-A  1-B  2-A  5-B
0    1    3    3    2
1    2    4    4    7

我正在寻找优雅的pandastic解决方案来拥有这样的数据框架:

     1    2    5
0    4    3    2
1    6    4    7

举例来说,更具体的第1-A列,意味着人名id = 1,费用类别A.行是每月的费用。结果,我希望每个人每月支出费用(因此第1列是第1-A列和第1-B列的总和)。请注意,当没有费用时,没有列为0。当然它应该准备好更多列(ID和类别)。

我非常确定能够很好地分离列选择和总结操作的智能解决方案。

1 个答案:

答案 0 :(得分:1)

groupby与lambda函数一起使用,并使用split并选择第一个值,按列添加axis=1进行分组:

df1 = df.groupby(lambda x: x.split('-')[0], axis=1).sum()
#alternative
#df1 = df.groupby(df.columns.str.split('-').str[0], axis=1).sum()
print (df1) 

   1  2  5
0  4  3  2
1  6  4  7