我有一个简单的数据框,例如:
>>> df_test = pd.DataFrame(columns=["ID" ])
>>> df_test["DATE"] = [ '2001-02-01', '2001-03-01', '2001-02-15', '2001-03-15', '2001-02-15', '2001-03-30']
>>> df_test['ID'] = [1,2,3,1,5,4]
>>> df_test
ID DATE
0 1 2001-02-01
1 2 2001-03-01
2 3 2001-02-15
3 1 2001-03-15
4 5 2001-02-15
5 4 2001-03-30
我想按如下方式重新排列 ID 列:
>>> df_test
ID DATE
0 1 2001-02-01
1 1 2001-03-01
2 1 2001-02-15
3 1 2001-03-15
4 4 2001-02-15
5 4 2001-03-30
基本上每次有一个 ID 小于前一个时,用较小的 ID 填充先例值以保持单调。 我正在尝试以下内容:
df_test.ID.lt(df_test.ID.shift())
这给了我单调的变化点:
0 False
1 False
2 False
3 True
4 False
5 True
Name: ID, dtype: bool
但我不知道如何前进。 我将不胜感激
谢谢!
最佳答案
这个怎么样。不是很优雅,但显然有效(你需要在真实数据上调试它)。请注意,循环在这里很重要,因为每次迭代都应该对当前数据进行操作,而不是对初始数据进行操作。
prev_max = 0
for i in range(1, 6):
cur_max = df_test[df_test.ID == i].index.max()
if pd.notnull(cur_max):
df_test.loc[prev_max:cur_max, 'ID'] = i
prev_max = cur_max + 1
关于python - 列重新编号 Pandas Dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40384891/