python - 如何从相邻行有条件地更改列值?
问题描述
我有一个这样的日期框架:
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
and 值。D_Max
Error
Driver
因为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
我怎么能做这份工作?
提前致谢!
解决方案
您可以用 有条件地替换选定的系列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
推荐阅读
- docker - 使用 JDBC 输入插件在 Docker 上的 Logstash 不会从 SQL Server 获取所有行
- flutter - 如何突出显示我在字符串中搜索的确切单词,而不仅仅是字符串的开头?
- flutter - 如何实时获取文档长度
- javascript - Reactjs 从获取请求中返回一个对象
- javascript - Nginx 正在尝试打开文件而不是重定向到代理
- python - _joint_log_likelihood 给我错误的值
- sql - 如何按日期获取最后一件商品的价格
- python-3.x - 定期执行功能而不停止其他操作
- r - 使用 R 从 PDF 表单到数据框的文本挖掘
- r - 如果 r 中出现错误,则转到 lapply() 的下一次迭代