让我们从非常简单的抽象示例开始,我有这样一个dataframe:
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我正在寻找优雅的混乱解决方案,以获得这样的数据:
1 2 5
0 4 3 2
1 6 4 7举个例子,更具体的第1-A列,意思是person id=1,费用类别A。行是每个月的开支。因此,我希望每个人每月的费用跨类别(因此,第1栏是第1-A和1-B栏之和)。注意,当没有费用时,就没有0列。当然,它应该为更多的列( it和类别)做好准备。
我很肯定,对于这一点,有很好的分离列选择和求和的智能解决方案。
发布于 2018-04-26 08:51:48
使用带有拆分的groupby和lambda函数,并选择第一个值,用于按列分组添加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 7https://stackoverflow.com/questions/50038718
复制相似问题