python-3.x - 根据 pandas 数据框中的其他列创建聚合列
问题描述
我有一个数据框如下:
import pandas as pd
import numpy as np
import datetime
# intialise data of lists.
data = {'group' :["A","A","B","B","B"],
'A1_val' :[4,5,7,6,5],
'A1M_val' :[10,100,100,10,1],
'AB_val' :[4,5,7,6,5],
'ABM_val' :[10,100,100,10,1],
'AM_VAL' : [4,5,7,6,5]
}
# Create DataFrame
df1 = pd.DataFrame(data)
df1
group A1_val A1M_val AB_val ABM_val AM_VAL
0 A 4 10 4 10 4
1 A 5 100 5 100 5
2 B 7 100 7 100 7
3 B 6 10 6 10 6
4 B 5 1 5 1 5
第 1 步:我想创建如下列:A1_agg_val = A1_val + A1M_val 的总和(从列中删除 M,如果名称匹配,则求和)
同样,AB_agg_val = AB_val + ABM_val
由于“AM_VAL”没有匹配的列,AM_agg_val = AM_val
My expected output:
group A1_val A1M_val AB_val ABM_val AM_VAL A1_AGG_val AB_AGG_val A_AGG_val
0 A 4 10 4 10 4 14 14 4
1 A 5 100 5 100 5 105 105 5
2 B 7 100 7 100 7 107 107 7
3 B 6 10 6 10 6 16 16 6
4 B 5 1 5 1 5 6 6 5
解决方案
你可以使用 groupbyaxis=1
out = (df1.assign(**df1.loc[:,df1.columns.str.lower().str.endswith('_val')]
.groupby(lambda x: x[:2],axis=1).sum().add_suffix('_agg_value')))
print(out)
group A1_val A1M_val AB_val ABM_val AM_VAL A1_agg_value AB_agg_value \
0 A 4 10 4 10 4 14 14
1 A 5 100 5 100 5 105 105
2 B 7 100 7 100 7 107 107
3 B 6 10 6 10 6 16 16
4 B 5 1 5 1 5 6 6
AM_agg_value
0 4
1 5
2 7
3 6
4 5
推荐阅读
- node.js - 需要角度和 Neo4j 集成的参考站点/材料
- angular - 使用 popper.js 的指令测试组件失败
- ruby - 如何检查零?对于 ERB 中的变量
- asp.net-core - 使用 linq 从实体框架核心获取 {"error":"Null TypeMapping in Sql Tree"}
- elasticsearch - Google Cloud Platform - 连接到 Elastic Search
- angularjs - 我可以使用angularJS在html中的三元运算中连接多个对象参数以形成单个字符串吗?
- spring-batch - 新执行时跳过重试
- javascript - 如何通过 ajax 服务器端处理发送 javascript 变量?
- c# - 检查sql server管理中是否存在相同的用户名.....如果是,请不要添加用户名
- indexing - 想在 Notepad++(或 Excel 或 Word)中的每个数字后插入换行符