pandas 对一组动态选择的列应用Groupby和聚合

a0zr77ik  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(135)

我有一个 Dataframe ,需要根据一些列对数据进行分组。
静之道:

dfMMS_BBMS_pv.columns
['area_type', 'area_name', 'area_code', 'date', 'A_BBMS',
   'A_MMS', 'Others_BBMS', 'Others_MMS', 'B_BBMS',
   'C_BBMS', 'C_MMS', 'T_BBMS', 'V_BBMS',
   'D_BBMS', 'D_MMS']

dfMMS_BBMS_pv=dfMMS_BBMS_pv.groupby(['area_type', 'area_name', 'area_code']).\
agg({'date': lambda x: list((x)) ,'A_MMS': lambda x: 
list(round(x,2)) })

现在我的问题是,如何根据一组具有特定模式的列名来动态地进行聚合:

Interested_Cols=dfMMS_BBMS_pv.filter(regex='BBMS|MMS').columns

dfMMS_BBMS_pv=dfMMS_BBMS_pv.groupby(['area_type', 'area_name', 'area_code']).\
agg({'date': lambda x: list((x)) ,[i: lambda x : list(round(x,2)) for i in       
list(Interested_Cols)]

为了澄清,应显示日期列。
我收到的错误:

mccptt67

mccptt671#

合并两个字典并传递到GroupBy.agg,在聚合前创建最终字典:

d = {**{'date': lambda x: list(x)},
   **{i: lambda x: list(round(x,2)) for i in Interested_Cols}}

dfMMS_BBMS_pv=dfMMS_BBMS_pv.groupby(['area_type', 'area_name', 'area_code']).agg(d)

相关问题