我有一个简单的数据框,如:
>>> 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时,用小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
但我不知道如何前进。 我很感激任何想法
谢谢!
答案 0 :(得分:0)
这个怎么样?不是很优雅,但显然有效(你需要在真实数据上调试这个)。请注意,循环在这里很重要,因为每次迭代都应该对当前数据进行操作,而不是对初始数据进行操作。
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