如何基于DataFrame中列A的相同值生成递增序列的新列
如何基于DataFrame中列A的相同值生成递增序列的新列
嗨,这问题其实很简单,用Pandas的分组计数功能就能轻松搞定!先看看你的示例数据:
import pandas as pd df = pd.DataFrame.from_dict({'A':[1,1,2], 'B':[10,20,14], "C":[30,40,20]})
你需要的是按列A的取值分组,每组内生成从1开始的递增序号,当A的值切换到新的数值时,序号重置从头开始。这里可以用groupby()结合cumcount()方法:
# 生成新列newCol,组内从1开始递增 df['newCol'] = df.groupby('A').cumcount() + 1
运行这段代码后,你的DataFrame就会变成这样:
| A | B | C | newCol |
|---|---|---|---|
| 1 | 10 | 30 | 1 |
| 1 | 20 | 40 | 2 |
| 2 | 14 | 20 | 1 |
简单解释下原理:
df.groupby('A'):把数据按照列A的不同值分成独立的小组(比如A=1是一组,A=2是另一组).cumcount():给每个小组内的行分配从0开始的连续整数- 加1是因为你想要的是从1开始的序号,要是想从0开始直接去掉
+1就行
这样完全符合你的需求啦,当A的值保持相同时序号递增,切换新值就重置~
备注:内容来源于stack exchange,提问作者Shawn Zhang
相关产品推荐
相关产品推荐

