python - 根据列名中的模式对列求和
问题描述
让我们从非常简化的抽象示例开始,我有一个这样的数据框:
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 和类别)做好准备。
我很确定存在具有良好分离列选择和求和操作的智能解决方案。
解决方案
使用groupby
带有 split 的 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
推荐阅读
- asp.net-core - 无法为在 xUnit 中执行 Entity Framework Core 操作的控制器运行测试
- java - 比较 JSP 中的字符串会产生非常奇怪的错误,而不是指定原因
- c# - 使用将接口而不是具体类传递给@ChildContent 的 [CascadingParameter]
在西装外套 - c# - 在根对象上设置 EntityState.Modified 会向数据库添加任何新对象吗?
- javascript - 无法从资源文件夹获取文件路径 - Java(异常)
- algorithm - 关于月球近地点和远地点的算法
- php - 在 Laravel 7 中调用模型 [App\Category] 上的未定义关系 [products]
- java - 如何将“长”数字表示为链表中的节点 [JAVA]
- python - python函数和php转换的不同输出
- python - 在 Python 中生成 ISO8601 格式的随机日期时间列表