python - 在下一个`score`值之前的任何行中查找下一个`resit`值的索引行
问题描述
resit
在下一个值之前的任何行中查找下一个值的索引行score
:
ts = [
datetime.strptime('2016-06-19 22:01:22.229', '%Y-%m-%d %H:%M:%S.%f'),
datetime.strptime('2016-06-19 23:32:08.109', '%Y-%m-%d %H:%M:%S.%f'),
datetime.strptime('2016-06-20 02:50:22.181', '%Y-%m-%d %H:%M:%S.%f'),
datetime.strptime('2016-06-20 06:12:44.249', '%Y-%m-%d %H:%M:%S.%f'),
datetime.strptime('2016-06-20 19:27:22.129', '%Y-%m-%d %H:%M:%S.%f'),
datetime.strptime('2016-06-21 11:39:08.119', '%Y-%m-%d %H:%M:%S.%f'),
datetime.strptime('2016-06-22 23:32:08.109', '%Y-%m-%d %H:%M:%S.%f'),
datetime.strptime('2016-06-23 02:50:22.181', '%Y-%m-%d %H:%M:%S.%f'),
datetime.strptime('2016-06-23 06:12:44.249', '%Y-%m-%d %H:%M:%S.%f'),
datetime.strptime('2016-06-23 19:27:22.129', '%Y-%m-%d %H:%M:%S.%f'),
datetime.strptime('2016-06-24 11:39:08.119', '%Y-%m-%d %H:%M:%S.%f'),
datetime.strptime('2016-06-24 16:59:22.610', '%Y-%m-%d %H:%M:%S.%f')
]
score = [ np.nan, 12, np.nan, np.nan, np.nan, np.nan, 11, np.nan, np.nan, 12, np.nan, 14]
resit = [ np.nan, np.nan, np.nan, 16, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 7, np.nan]
df = pd.DataFrame(data={'date': ts, 'jack': score, 'jack2': resit})
这看起来是这样的......
date jack jack2 resit_score
0 2016-06-19 22:01:22.229 NaN NaN NaN
1 2016-06-19 23:32:08.109 12.0 NaN 16.0
2 2016-06-20 02:50:22.181 NaN NaN NaN
3 2016-06-20 06:12:44.249 NaN 16.0 NaN
4 2016-06-20 19:27:22.129 NaN NaN NaN
5 2016-06-21 11:39:08.119 NaN NaN NaN
6 2016-06-22 23:32:08.109 11.0 NaN NaN
7 2016-06-23 02:50:22.181 NaN NaN NaN
8 2016-06-23 06:12:44.249 NaN NaN NaN
9 2016-06-23 19:27:22.129 12.0 NaN 7.0
10 2016-06-24 11:39:08.119 NaN 7.0 NaN
11 2016-06-24 16:59:22.610 14.0 NaN NaN
在excel中我会使用索引匹配但在python中还不确定如何实现
解决方案
删除所有行NaN
并仅移回jack2
值:
df['resit_score'] = df[['jack', 'jack2']].dropna(how='all')['jack2'].shift(-1)
>>> df
date jack jack2 resit_score
0 2016-06-19 22:01:22.229 NaN NaN NaN
1 2016-06-19 23:32:08.109 12.0 NaN 16.0
2 2016-06-20 02:50:22.181 NaN NaN NaN
3 2016-06-20 06:12:44.249 NaN 16.0 NaN
4 2016-06-20 19:27:22.129 NaN NaN NaN
5 2016-06-21 11:39:08.119 NaN NaN NaN
6 2016-06-22 23:32:08.109 11.0 NaN NaN
7 2016-06-23 02:50:22.181 NaN NaN NaN
8 2016-06-23 06:12:44.249 NaN NaN NaN
9 2016-06-23 19:27:22.129 12.0 NaN 7.0
10 2016-06-24 11:39:08.119 NaN 7.0 NaN
11 2016-06-24 16:59:22.610 14.0 NaN NaN
更新
返回行索引会更有用。这个怎么切换?
>>> df['resit_score'] = df.assign(jack2=df['jack2'].dropna().index.to_frame()) \
[['jack', 'jack2']].dropna(how='all')['jack2'].shift(-1)
>>> df
date jack jack2 resit_score
0 2016-06-19 22:01:22.229 NaN NaN NaN
1 2016-06-19 23:32:08.109 12.0 NaN 3.0
2 2016-06-20 02:50:22.181 NaN NaN NaN
3 2016-06-20 06:12:44.249 NaN 16.0 NaN
4 2016-06-20 19:27:22.129 NaN NaN NaN
5 2016-06-21 11:39:08.119 NaN NaN NaN
6 2016-06-22 23:32:08.109 11.0 NaN NaN
7 2016-06-23 02:50:22.181 NaN NaN NaN
8 2016-06-23 06:12:44.249 NaN NaN NaN
9 2016-06-23 19:27:22.129 12.0 NaN 10.0
10 2016-06-24 11:39:08.119 NaN 7.0 NaN
11 2016-06-24 16:59:22.610 14.0 NaN NaN
推荐阅读
- flutter - 如何检测颤动中的滑动
- laravel - 评论 @extends('layouts.app') 不起作用
- java - Leetcode1002. 查找字符串之间的公共字符 -Java
- r - 尝试写入永久表时,copy_to 不适用于非默认模式
- javascript - 如何访问此 JSON 层次结构中的子节点?
- excel - 确定是否按下了取消按钮,其中 InputBox 变量声明为 Double
- sparql - SPARQL 可选未绑定 VS 过滤器不存在
- php - 如何读取 Amazon SNS JSON 响应
- neo4j - Mac OS 上的 Neo4j Desktop 更改端口号
- node.js - node dist/server.js 退出且没有错误消息