【问题标题】:Group by column and Spread values of another Column into other Columns按列分组并将另一列的值传播到其他列
【发布时间】:2020-10-15 23:50:54
【问题描述】:

我有当前的数据框,我正在尝试按Name 分组并将weight 的值传播到列中,并在每次出现时进行计数。谢谢!

df = pd.DataFrame({'Name':['John','Paul','Darren','John','Darren'],
'Weight':['Average','Below Average','Above Average','Average','Above Average']})

期望的输出:

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    试试pandas crosstab

    pd.crosstab(df.Name, df.Weight)
    
    Weight  Above Average   Average Below Average
    Name            
    John           0           2        0
    Paul           0           0        1
    Darren         2           0        0
    

    【讨论】:

    • aaah...我再也不会忘记pd.crosstab :) +1
    【解决方案2】:

    使用 groupby 和 unstack:

        df = pd.DataFrame({'Name':['John','Paul','Darren','John','Darren'],
    'Weight':['Average','Below Average','Above Average','Average','Above Average']})
    df = df.groupby(['Name', 'Weight'])['Weight'].count().unstack(1).fillna(0).astype(int).reset_index()
    df = df.rename_axis('', axis=1).set_index('Name')
    df
    Out[1]: 
            Above Average  Average  Below Average
    Name                                         
    Darren              2        0              0
    John                0        2              0
    Paul                0        0              1
    

    【讨论】:

    • 最后使用 .fillna(0) 得到想要的结果。
    • @adhg 是的,我还包括了.reset_index()。谢谢。
    • @DavidErickson 您的结果中的“重量”是什么?它不是列标题的一部分吗?
    • 权重是指数。随着 unstack 的工作原理和 reset index 的工作原理,它看起来像什么。您可以更改索引的名称。如果您使用to_csvto_excel 将文件发送到excel 并传递index=False,则将被忽略。
    • 是否可以将“权重”索引完全重置为默认索引?
    【解决方案3】:

    使用get dummies 在这里实现你所需要的

    pd.get_dummies(df.set_index('Name'), dummy_na=False,prefix=[None]).groupby('Name').sum()
     
    
             Above Average  Average  Below Average
    Name                                         
    Darren              2        0              0
    John                0        2              0
    Paul                0        0              1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-02
      • 2021-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多