首页 > 解决方案 > 使用 python 处理数据的复杂要求

问题描述

这是我的原始文本字段

Area    Brand   Points
USA     Nike    86
USA     Addidas 85
USA     Speedo  84
USA     Nike    83
USA     Speedo  82
USA     Nike    81
Japan   Nike    84
Japan   Nike    85
Japan   Nike    86
Japan   Addidas 82
Japan   Addidas 80
Japan   Addidas 86
Japan   Speedo  84
Japan   Speedo  82

对于 Area 列,它只显示唯一值 对于 Brand 列,它会显示高频值 对于 Points 列,它只显示 mean() 结果

因此,它应该与以下相同。

Area    | ModBrand        | AvePoints
USA     | NIKE            | MEAN NUMBER
Japan   | [NIKE, Addidas] | MEAN NUMBER

我知道我可以对区域使用 groupby 函数,对点使用均值

data = data.groupby(['Area']).mean().reset_index()

但是对于品牌列。你能给我一些建议吗?

谢谢

标签: pythonpandaspandas-groupby

解决方案


你可以pd.Series.mode这样使用:

df.groupby('Area').agg({'Brand': lambda x: x.mode().values.tolist(), 'Points': 'mean'})

给出:

                 Brand  Points
Area                          
Japan  [Addidas, Nike]  83.625
USA             [Nike]  83.500

推荐阅读