【问题标题】:Pandas group by a specific value in any of given columnsPandas 按任何给定列中的特定值分组
【发布时间】:2020-09-11 09:38:12
【问题描述】:

给定熊猫数据框如下:

   Partner1 Partner2    Interactions
0  Ann      Alice       1
1  Alice    Kate        8
2  Kate     Tony        9
3  Tony     Ann         2

我如何按特定合作伙伴分组,比如说找到 Ann 的互动总数?

类似

gb = df.groupby(['Partner1'] or ['Partner2']).agg({'Interactions': 'sum'})

并得到答案:

Partner Interactions
Ann     3
Alice   9
Kate    17
Tony    11

【问题讨论】:

    标签: python pandas dataframe pandas-groupby


    【解决方案1】:

    您可以将meltgroupby 一起使用。先melt

    df = pd.melt(df, id_vars='Interactions', value_vars=['Partner1', 'Partner2'], value_name='Partner')
    

    这将给出:

       Interactions   variable  Partner
    0             1   Partner1      Ann
    1             8   Partner1    Alice
    2             9   Partner1     Kate
    3             2   Partner1     Tony
    4             1   Partner2    Alice
    5             8   Partner2     Kate
    6             9   Partner2     Tony
    7             2   Partner2      Ann
    

    现在,按Partner 和总和分组:

    df.groupby('Partner')[['Interactions']].sum()
    

    结果:

    Partner  Interactions
      Alice             9
        Ann             3
       Kate            17
       Tony            11
    

    【讨论】:

      【解决方案2】:

      您可以合并数据框本身:

      # join the df to itself
      join_df = df.merge(df, left_on='Partner1', right_on='Partner2', suffixes=('', '_'))
      
      # get sum
      join_df['InteractionsSum'] = join_df[['Interactions', 'Interactions_']].agg(sum, 1)
      
      join_df = join_df[['Partner1', 'Interactions']].copy()
      
      print(join_df)
      
        Partner1  Interactions
      0      Ann             1
      1    Alice             8
      2     Kate             9
      3     Tony             2
      

      【讨论】:

      • 很好的解决方案,但最终会是: print(join_df[['Partner1', 'InteractionsSum']])
      • 好吧,你只需要选择列,检查编辑
      猜你喜欢
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-21
      • 2021-11-16
      • 1970-01-01
      • 2021-07-15
      • 2017-01-31
      相关资源
      最近更新 更多