列重新编号Pandas Dataframe

时间:2016-11-02 16:22:59

标签: python pandas

我有一个简单的数据框,如:

>>> 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

但我不知道如何前进。 我很感激任何想法

谢谢!

1 个答案:

答案 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