【问题标题】:Categorize column according to lists and aggregate with result根据列表对列进行分类并与结果聚合
【发布时间】:2020-11-11 06:53:07
【问题描述】:

假设我有一个如下的数据框:

d = {'name': ['spain', 'greece','belgium','germany','italy'], 'davalue': [3, 4, 6, 9, 3]}
df = pd.DataFrame(data=d)
index name  davalue
0    spain      3
1    greece     4
2    belgium    6
3    germany    9
4    italy      3

我想根据名称列中的字符串列表进行聚合和求和。例如,我可能有:southern=['spain', 'greece', 'italy']northern=['belgium','germany']

我的目标是使用sum进行聚合,得到:

index name  davalue
0   southern    10
1   northen     15

10=3+4+315=6+9 的位置

我想象过这样的事情:

df.groupby(by=[['spain','greece','italy'],['belgium','germany']])

可能存在。 docs

标签或标签列表可以通过 self 中的列传递给分组

但我不确定我是否理解这在语法方面的含义。

【问题讨论】:

  • 标签列表将通过像这样传递等于数据框中行数的列表来手动定义您的组。 df.groupby(['southern', 'southern', 'northern', 'northern', 'southern'])['davalue'].sum()
  • @ScottBoston,感谢您的澄清。不幸的是,实际数据集中的行数要多得多。但我想我可以按照@Quang Hoang 的建议使用某种df['name'].map() 来构建该列表
  • 没错! QuangHoang 解决方案是最好的。我只是向您指出,这就是手动标签列表的样子。

标签: python pandas dataframe aggregate pandas-groupby


【解决方案1】:

我会建立一个字典和地图:

d = {v:'southern' for v in southern}
d.update({v:'northern' for v in northern})

df['davalue'].groupby(df['name'].map(d)).sum()

输出:

name
northern    15
southern    10
Name: davalue, dtype: int64

【讨论】:

    【解决方案2】:

    一种方法是使用np.select 并将结果用作石斑鱼:

    import numpy as np
    
    southern=['spain', 'greece', 'italy']
    northern=['belgium','germany']
    
    g = np.select([df.name.isin(southern),
                   df.name.isin(northern)],
                  ['southern', 'northern'],
                  'others')
    
    df.groupby(g).sum()
    
              davalue
    northern       15
    southern       10
    

    【讨论】:

      【解决方案3】:
      df["regional_group"]=df.apply(lambda x: "north" if x["home_team_name"] in ['belgium','germany'] else "south",axis=1)
      

      您创建一个新列,稍后您可以通过该列进行分组。

      df.groupby("regional_group")["davavalue"].sum()
      

      【讨论】:

        猜你喜欢
        • 2022-01-23
        • 2015-09-09
        • 2013-12-05
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-06
        相关资源
        最近更新 更多