我有一个这样的数据框架:
name quantity
a 5
e 4
g 7
预期输出:
name id
a 1
a 2
a 3
a 4
a 5
e 1
e 2
e 3
e 4
g 1
g 2
g 3
g 4
g 5
g 6
g 7
我想为每个名字创建id。对于他们的每一个数量,ID从1开始,到id = quantity
结束。我怎样才能做到这一点呢?
您可以在数量栏中将reindex
与repeat
合并,然后使用cumcount+1
来获得您想要的结果:
new_df = df.reindex(df.index.repeat(df.quantity)).drop('quantity',axis=1)
new_df['id'] = new_df.groupby('name').cumcount()+1
name id
0 a 1
0 a 2
0 a 3
0 a 4
0 a 5
1 e 1
1 e 2
1 e 3
1 e 4
2 g 1
2 g 2
2 g 3
2 g 4
2 g 5
2 g 6
2 g 7
尝试一次运行每一行并检查我们做了什么。我们首先根据数量列中的值重复行数。然后用'name'分组后用cumcount()+1
替换quantity中的值