根据组和项目组枚举 Pandas 中的项目

Enumerate Items in Pandas based on Group and Item Group

我有一个 pandas 数据框,其中包含来自超市收银系统的数据,其中列出了每位客户(“ID”)和他们购买的每件商品(“Item”)。我想枚举客户购买中的每个项目 ("Item_e")。

ID = [1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3]
Item = ["Apple", "Orange", "Apple", "Apple", "Orange", "Orange", "Banana", "Banana", "Apple", "Pumpkin", "Apple", "Banana"]

Item_e = ["Apple_1", "Orange_1", "Apple_2", "Apple_3", "Orange_1", "Orange_2", "Banana_1", "Banana_2", "Apple_1", "Pumpkin_1", "Apple_1", "Banana_1"]

“ID”和“Item”是数据框中的现有列,我想生成“Item_e”作为新列。

如果顾客 1 买了三个苹果,我希望第一个扫描的苹果变成 Apple_1,第二个(在整个购买过程中出现)变成 Apple_2,依此类推。如果客户 2 也买了两个苹果,数据集中的第一个又变成 Apple_1,第二个变成 Apple_2.

使用GroupBy.cumcount with Series.str.cat:

df = pd.DataFrame({"ID":ID,
                   "Item":Item})

s = df.groupby(['ID','Item']).cumcount().add(1).astype(str)
df['Item_e'] = df['Item'].str.cat(s, sep='_')
#alternative
#df['Item_e'] = df['Item'] + '_' + s
print (df)
    ID     Item     Item_e
0    1    Apple    Apple_1
1    1   Orange   Orange_1
2    1    Apple    Apple_2
3    1    Apple    Apple_3
4    2   Orange   Orange_1
5    2   Orange   Orange_2
6    2   Banana   Banana_1
7    2   Banana   Banana_2
8    2    Apple    Apple_1
9    3  Pumpkin  Pumpkin_1
10   3    Apple    Apple_1
11   3   Banana   Banana_1