numpy 用于在 Dataframe 的列中的值内包含批号的Python代码

yr9zkbsy  于 2022-11-29  发布在  Python
关注(0)|答案(1)|浏览(116)

我有一个这样的 Dataframe

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

有什么建议或参考资料吗?
我有这样一段代码,它有点做的工作,但它不考虑名称列,然后递增。

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

也许还有别的解决办法吗?

nlejzf6q

nlejzf6q1#

您可以用途:

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

相关问题