Pandas 分组和连接多行

问题描述 投票:0回答:1

背景

我想按rule_id和calc_id进行分组,并将多列转换为一行,其中每个变量都用“,'连接”

数据示例

Calc_ID    Rule_ID    Name    Tracked?
100                   Rule1   Y
100                   Rule2   N
100                   Rule3   N
           YYY        Test1   Y
           YYY        Test2   Y
           YYY        Test3   N

预期结果

Calc_ID    Rule_ID    Name                   Tracked?
100                   Rule1, Rule2, Rule3    Y, N, N
           YYY        Test1, Test2, Test3    Y, Y, N

当前代码

我尝试一次对每一列应用一个分组,但这不起作用。

import pandas as pd

pd = read_csv(path)
pd = pd.fillna('') # <- to fix nans on groupby calc_id / rule_id

pd = pd.groupby(['Rule_ID', 'Calc_ID'])['Name'].apply(','.join).reset_index()
# pd = pd.groupby(['Rule_ID', 'Calc_ID'])['Tracked?'].apply(','.join).reset_index()
# ^ but this doesn't work because the initial groupby removes other columns
python pandas dataframe group-by
1个回答
0
投票

您应该使用

agg
来聚合每组中的值,而不是
apply
:

df = df.groupby(["Calc_ID", "Rule_ID"], as_index=False).agg(", ".join)
  Calc_ID Rule_ID                 Name Tracked?
0     100          Rule1, Rule2, Rule3  Y, N, N
1             YYY  Test1, Test2, Test3  Y, Y, N
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.