我在Python中给出了这样一个数据集:
#Load the required libraries
import pandas as pd
#Create dataset
data = {'id': [1, 1, 1, 1, 1,1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3],
'runs': [6, 6, 6, 6, 6,6,7,8,9,10, 3, 3, 3,4,5,6, 5, 5,5, 5,5,6,7,8],
'Children': ['No', 'Yes', 'Yes', 'Yes', 'No','No', 'Yes', 'Yes', 'Yes', 'No', 'Yes', 'Yes', 'No', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'No', 'Yes', 'No', 'Yes', 'Yes', 'No'],
'Days': [123, 128, 66, 120, 141,123, 128, 66, 120, 141, 52,96, 120, 141, 52,96, 120, 141,123,15,85,36,58,89],
}
#Convert to dataframe
df = pd.DataFrame(data)
print("df = \n", df)
上面的 Dataframe 如下所示:
这里,对于每个"id",我希望截断重复"runs"的列,并使编号在该id中连续。
例如,
对于id = 1,在6处截断"运行",并从1开始对数据集重新编号。
对于id = 2,在3处截断"运行",并从1开始对数据集重新编号。
对于id = 3,在5处截断"运行",并从1开始对数据集重新编号。
净结果应该是这样的:
有人能告诉我如何在python中完成这个任务吗?
我希望使用Python截断对应于特定ID/组的列并对其重新编号
2条答案
按热度按时间pw9qyyiw1#
用
loc
和duplicated
过滤掉重复项,然后用groupby.cumcount
重新编号:输出:
uwopmtnx2#
您可以创建一个循环来遍历每个
id
和run
截止值,对于循环的每次迭代,通过原始 Dataframe 的id和run值确定 Dataframe 的新段,并将新 Dataframe 附加到最终 Dataframe 。结果: