代码之家  ›  专栏  ›  技术社区  ›  KL_

熊猫分组和concat多行

  •  0
  • KL_  · 技术社区  · 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
    
    1 回复  |  直到 1 年前
        1
  •  1
  •   e-motta    1 年前

    你应该使用 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