【问题标题】:Summing columns according to pattern in column names根据列名中的模式对列求和
【发布时间】:2018-04-26 16:51:48
【问题描述】:

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

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 和类别)做好准备。

我很确定存在具有良好分离列选择和求和操作的智能解决方案。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    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  7
    

    【讨论】:

    • 非常感谢!如此简单而优雅的解决方案:)
    猜你喜欢
    • 1970-01-01
    • 2015-09-30
    • 2020-03-22
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 2022-01-07
    相关资源
    最近更新 更多