开发者社区> 问答> 正文

根据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

问题来源: stackoverflow

展开
收起
is大龙 2020-03-21 08:58:23 505 0
1 条回答
写回答
取消 提交回答
  • 您可以在上使用groupby axis=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  
    

    回答来源: stackoverflow

    2020-03-21 08:59:33
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
中文:即学即用的Pandas入门与时间序列分析 立即下载
即学即用的Pandas入门与时间序列分析 立即下载
低代码开发师(初级)实战教程 立即下载