Pandas 创建一个新列,它采用给定项目代码的最常见项目描述
Pandas Create a new Column which takes the Most Frequent item Description given Item Codes
我有一个看起来像这样的数据框:
Group
UPC
Description
246
1234568
Chips BBQ
158
7532168
Cereal Honey
246
9876532
Chips Ketchup
665
8523687
Strawberry Jam
246
1234568
Chips BBQ
158
5553215
Cereal Chocolate
我想根据组 # 或第一个实例(如果有平局)用最频繁的描述替换项目的描述。
所以在上面的例子中:Chips Ketchup(1 个实例)被 Chips BBQ(2 个实例)替换,Cereal Chocolate 被 Cereal Honey(第一个实例)替换。
期望的输出是:
Group
UPC
Description
246
1234568
Chips BBQ
158
7532168
Cereal Honey
246
9876532
Chips BBQ
665
8523687
Strawberry Jam
246
1234568
Chips BBQ
158
5553215
Cereal Honey
如果这太复杂,我可以简单地用第一个实例替换,根本不考虑频率。
提前致谢
您可以使用
df['Description'] = df.groupby('Group')['Description'].transform(lambda s: s.value_counts().index[0])
似乎 Series.value_counts
(与我也尝试过的 Series.mode
不同)对第一次出现时出现相同次数的元素进行排序。此行为未记录在案,因此我不确定您是否可以信赖它。
我有一个看起来像这样的数据框:
Group | UPC | Description |
---|---|---|
246 | 1234568 | Chips BBQ |
158 | 7532168 | Cereal Honey |
246 | 9876532 | Chips Ketchup |
665 | 8523687 | Strawberry Jam |
246 | 1234568 | Chips BBQ |
158 | 5553215 | Cereal Chocolate |
我想根据组 # 或第一个实例(如果有平局)用最频繁的描述替换项目的描述。
所以在上面的例子中:Chips Ketchup(1 个实例)被 Chips BBQ(2 个实例)替换,Cereal Chocolate 被 Cereal Honey(第一个实例)替换。
期望的输出是:
Group | UPC | Description |
---|---|---|
246 | 1234568 | Chips BBQ |
158 | 7532168 | Cereal Honey |
246 | 9876532 | Chips BBQ |
665 | 8523687 | Strawberry Jam |
246 | 1234568 | Chips BBQ |
158 | 5553215 | Cereal Honey |
如果这太复杂,我可以简单地用第一个实例替换,根本不考虑频率。
提前致谢
您可以使用
df['Description'] = df.groupby('Group')['Description'].transform(lambda s: s.value_counts().index[0])
似乎 Series.value_counts
(与我也尝试过的 Series.mode
不同)对第一次出现时出现相同次数的元素进行排序。此行为未记录在案,因此我不确定您是否可以信赖它。