如何在熊猫中分组并保留所有列

时间:2019-11-07 18:23:53

标签: python pandas pandas-groupby

我有一个像这样的数据框:

   year       drug_name  avg_number_of_ingredients
0  2019     NEXIUM I.V.                          8
1  2016         ZOLADEX                         10
2  2017        PRILOSEC                         59
3  2017  BYDUREON BCise                         24
4  2019        Lynparza                         28

我需要按年份对药品名称和平均成分数进行分组:

   year     drug_name avg_number_of_ingredients
0  2019  drug a,b,c..     mean value for column
1  2018  drug a,b,c..     mean value for column
2  2017  drug a,b,c..     mean value for column

如果我做df.groupby('year'),我会失去药物名称。我该怎么办?

1 个答案:

答案 0 :(得分:-1)

让我向您展示有关简单示例的解决方案。首先,我制作与您相同的数据框:

>>> df = pd.DataFrame(
    [
        {'year': 2019, 'drug_name': 'NEXIUM I.V.', 'avg_number_of_ingredients': 8},
        {'year': 2016, 'drug_name': 'ZOLADEX', 'avg_number_of_ingredients': 10},
        {'year': 2017, 'drug_name': 'PRILOSEC', 'avg_number_of_ingredients': 59},
        {'year': 2017, 'drug_name': 'BYDUREON BCise', 'avg_number_of_ingredients': 24},
        {'year': 2019, 'drug_name': 'Lynparza', 'avg_number_of_ingredients': 28},
    ]
)
>>> print(df)
   year       drug_name  avg_number_of_ingredients
0  2019     NEXIUM I.V.                          8
1  2016         ZOLADEX                         10
2  2017        PRILOSEC                         59
3  2017  BYDUREON BCise                         24
4  2019        Lynparza                         28

现在,我制作一个df_grouped,它仍然包含有关药品名称的信息。

>>> df_grouped = df.groupby('year', as_index=False).agg({'drug_name': ', '.join, 'avg_number_of_ingredients': 'mean'})
>>> print(df_grouped)
   year                 drug_name  avg_number_of_ingredients
0  2016                   ZOLADEX                       10.0
1  2017  PRILOSEC, BYDUREON BCise                       41.5
2  2019     NEXIUM I.V., Lynparza                       18.0