我想创建一个新列,将连续的数字后缀附加到匹配的值上。
如果我从以下内容开始...
d = {'item': ['A', 'A', 'B', 'C', 'C', 'A'],
'year': [2019, 2019, 2019, 2019, 2020, 2020]}
df0 = pd.DataFrame(d)
item year
0 A 2019
1 A 2019
2 B 2019
3 C 2019
4 C 2020
5 A 2020
我想要这个中间步骤,
item item_number year
0 A 1 2019
1 A 2 2019
2 B 1 2019
3 C 1 2019
4 C 2 2020
5 A 3 2020
然后填写此最终表格。
numbered_item item year
0 A 1 A 2019
1 A 2 A 2019
2 B 1 B 2019
3 C 1 C 2019
4 C 2 C 2020
5 A 3 A 2020
答案 0 :(得分:2)
使用df.insert()
将列插入特定的位置并使用df.groupby().cumcount()
:
df0.insert(0,'numbered_item',df0.item+df0.groupby('item').cumcount().add(1).astype(str))
print(df0)
numbered_item item year
0 A1 A 2019
1 A2 A 2019
2 B1 B 2019
3 C1 C 2019
4 C2 C 2020
5 A3 A 2020
答案 1 :(得分:0)
尝试:
df0['item_number'] = df0.groupby('item').cumcount()+1
df0['numbered_item'] = df0['item'].astype(str) + ' ' + df0['item_number'].astype(str)
输出:
item year item_number numbered_item
0 A 2019 1 A 1
1 A 2019 2 A 2
2 B 2019 1 B 1
3 C 2019 1 C 1
4 C 2020 2 C 2
5 A 2020 3 A 3