如何有条件地更改相邻行的列值?

时间:2018-07-25 13:59:56

标签: python pandas

我有一个这样的日期框架:

df = pd.DataFrame({'Car_ID': ['B332', 'B332', 'B332', 'B332', 'C315', 'C315', 'C315', 'C315', 'C315', 'C315', 'F310', 'F310'], \
                    'Date': ['2018-03-15', '2018', '2018-03-12', '2018-03-12', '2018', '2018-03-16', '2018', \
                             '2018', '2018-03-11','2018-03-11', '2018-03-10', '2018'], \
                   'D_Min' : ['2018-03-15', '2018-03-12', '2018-03-12', '2018-03-12','2018-03-16', '2018-03-16', '2018-03-11', '2018-03-11',\
                             '2018-03-11','2018-03-11', '2018-03-10', '2018'],\
                   'D_Max' :['2018-03-15', '2018-03-15', '2018-03-12','2018-03-12', '2018', '2018-03-16', '2018-03-16', '2018-03-16', \
                            '2018-03-11','2018-03-11', '2018-03-10', '2018-03-10'], \
                    'Driver': ['Alex', 'Alex', 'Error', 'Alex','Sara', 'Sara', 'Sara', 'Sara', 'Error', 'Sara', 'Franck','Franck']})
df[['Car_ID', 'Date', 'D_Min', 'D_Max', 'Driver']]

    Out:

    Car_ID  Date    D_Min   D_Max   Driver
0   B332    2018-03-15  2018-03-15  2018-03-15  Alex
1   B332    2018        2018-03-12  2018-03-15  Alex
2   B332    2018-03-12  2018-03-12  2018-03-12  Error
3   B332    2018-03-12  2018-03-12  2018-03-12  Alex
4   C315    2018        2018-03-16  2018        Sara
5   C315    2018-03-16  2018-03-16  2018-03-16  Sara
6   C315    2018        2018-03-11  2018-03-16  Sara
7   C315    2018        2018-03-11  2018-03-16  Sara
8   C315    2018-03-11  2018-03-11  2018-03-11  Error
9   C315    2018-03-11  2018-03-11  2018-03-11  Sara
10  F310    2018-03-10  2018-03-10  2018-03-10  Franck
11  F310    2018        2018        2018-03-10  Franck

,我想替换D_Min列中D_Max值的ErrorDriver

对于Error,我想在D_Min之前服用D_Max。像这样的东西:

    Out:

    Car_ID  Date    D_Min   D_Max   Driver
0   B332    2018-03-15  2018-03-15  2018-03-15  Alex
1   B332    2018        2018-03-12  2018-03-15  Alex
2   B332    2018-03-12  2018-03-12  2018-03-15  Error
3   B332    2018-03-12  2018-03-12  2018-03-12  Alex
4   C315    2018        2018-03-16  2018        Sara
5   C315    2018-03-16  2018-03-16  2018-03-16  Sara
6   C315    2018        2018-03-11  2018-03-16  Sara
7   C315    2018        2018-03-11  2018-03-16  Sara
8   C315    2018-03-11  2018-03-11  2018-03-16  Error
9   C315    2018-03-11  2018-03-11  2018-03-11  Sara
10  F310    2018-03-10  2018-03-10  2018-03-10  Franck
11  F310    2018        2018        2018-03-10  Franck

我怎么能做这项工作?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以有条件地用list替换所选系列。然后根据需要使用$ for a in `seq 6`; do python3 -m timeit -s "a = 10**$a" 'a in list(range(a))'; done 1000000 loops, best of 3: 0.84 usec per loop 100000 loops, best of 3: 3.04 usec per loop 10000 loops, best of 3: 57.7 usec per loop 1000 loops, best of 3: 639 usec per loop 100 loops, best of 3: 6.74 msec per loop 10 loops, best of 3: 70.3 msec per loop / NaN

ffill