让我们从非常简化的抽象示例开始,我有一个像这样的数据框:
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和类别)。
我非常确定能够很好地分离列选择和总结操作的智能解决方案。
答案 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