Python Pandas -如何按一列分组,并在特定条件下合并每组中其他两列的数据

qhhrdooz  于 2023-02-02  发布在  Python
关注(0)|答案(1)|浏览(139)

我有一个如下的 Dataframe
| 主键|姓名|价值|
| - ------|- ------|- ------|
| 一百二十三|美国广播公司|数值1|
| 一百二十三|定义|数值2|
| 一百二十三|吉|数值3|
| 四百五十六|美国广播公司|数值4|
| 七八九|钠氮|值5|
| 七八九|钠氮|数值6|
| 一百四十七|钠氮|值7|
我想应用以下逻辑:
1.按"主键"列的值分组
1.如果name列不是NaN,则创建一个新列"dataAggregated",其中"name"和"value"像字典一样组合在一起
1.如果name列为NaN,则创建一个新列"dataAggregated",其中"value"列中的数据用逗号分隔
(When它是按"主键"分组的,则所有"名称"数据要么有NaN,要么没有NaN。分组时不能混合使用这两种数据)
预期输出 Dataframe 应如下所示:
| 主键|数据聚合|
| - ------|- ------|
| 一百二十三|('abc ':'值1 ',' def ':'值2 ',' ghi ':'值3 '}|
| 四百五十六|('abc ':'数值4 '}|
| 七八九|"值5"、"值6"|
| 一百四十七|'值7'|
你知道怎么才能做到吗?谢谢

68de4m5k

68de4m5k1#

您可以对groupby.apply使用自定义聚合:

out = (df
   .groupby('main key')
   .apply(lambda g: g.set_index('name')['value'].to_dict()
                    if g['name'].notna().all() else
                    ', '.join(g['value'])
         )
   .reset_index(name='dataAggregated')
)

输出:

main key                                          dataAggregated
0       123  {'abc': 'Value 1', 'def': 'Value 2', 'ghi': 'Value 3'}
1       147                                                 Value 7
2       456                                      {'abc': 'Value 4'}
3       789                                        Value 5, Value 6

相关问题