根据组和项目组枚举 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
我有一个 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