我有一个像这样的数据框架
Name Age
0 U 20
1 U 20
2 U 20
3 U 18
4 I 45
5 I 68
6 I 8
7 D 7
8 D 6
9 I 89
,我想有批大小(比如3),我想显示另一列,从1开始增加批号,批大小在特定列值U, I, D中重复,在批大小之后,批号应该增加1(在特定的名称中)输出应该看起来像
Name Age Batch
0 U 20 1
1 U 20 1
2 U 20 1
3 U 18 2
4 I 45 3
5 I 68 3
6 I 8 3
7 D 7 4
8 D 6 4
9 I 89 5
有什么建议或参考吗?
我有这段代码,它完成了工作,但它不考虑Name列,然后递增。
resu['B'] = np.divmod(np.arange(len(resu)),3)[0]+1
我得到的输出是这样的,这不是想要的输出,因为它没有考虑名称列
index Name Age B
0 4 I 45 1
1 5 I 68 1
2 6 I 8 1
3 9 I 89 2
4 0 U 20 2
5 1 U 20 2
6 2 U 20 3
7 3 U 18 3
8 7 D 7 3
9 8 D 6 4
有没有其他的解决办法?
您可以使用:
N = 3
# group successive values
group = df['Name'].ne(df['Name'].shift()).cumsum()
# restart group every N times
df['Batch'] = (df.groupby(group)
.cumcount().mod(N)
.eq(0).cumsum()
)
输出:
Name Age Batch
0 U 20 1
1 U 20 1
2 U 20 1
3 U 18 2
4 I 45 3
5 I 68 3
6 I 8 3
7 D 7 4
8 D 6 4
9 I 89 5