首页 > 解决方案 > 如何从相邻行有条件地更改列值?

问题描述

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

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_Minand 值。D_MaxErrorDriver

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

我怎么能做这份工作?

提前致谢!

标签: pythonpandas

解决方案


您可以用 有条件地替换选定的系列NaN。然后根据需要使用ffill/ bfill

df.loc[df['Driver'] == 'Error', ['D_Min', 'D_Max']] = np.nan

df['D_Max'] = df['D_Max'].ffill()
df['D_Min'] = df['D_Min'].bfill()

print(df)

   Car_ID       D_Max       D_Min        Date  Driver
0    B332  2018-03-15  2018-03-15  2018-03-15    Alex
1    B332  2018-03-15  2018-03-12        2018    Alex
2    B332  2018-03-15  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-03-16  2018-03-11        2018    Sara
7    C315  2018-03-16  2018-03-11        2018    Sara
8    C315  2018-03-16  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-03-10        2018        2018  Franck

推荐阅读