python - 保留满足条件的行和相邻行
问题描述
对于 DataFrame,例如
import pandas as pd
import numpy as np
times = [21 , 34, 37, 40, 55, 65, 67, 84, 88, 90 , 91, 97, 104,105, 108]
names = ['bob', 'alice', 'bob', np.NaN , 'ali', 'alice', np.NaN , 'ali', 'moji', 'ali', 'moji', np.NaN , 'bob', 'bob', 'bob']
actions = ['enter', 'enter', 'search', 'search', 'enter', 'search', 'purchase', 'exit', 'enter' , 'enter', 'search', 'purchase', 'exit', 'enter', 'purchase']
df = pd.DataFrame({'name' : names , 'action': actions, 'time' : times})
我只想要行 where name
isNaN
以及恰好在这些行之前和之后的行。我可以通过命令for
来做到这一点。if
但是有没有更巧妙的方法来做到这一点?
解决方案
使用Series.isna
thenSeries.shift
获取之前和之后的行:
s1 = df['name'].isna()
s2 = s1.shift()
s3 = s1.shift(-1)
df[s1 | s2 | s3]
name action time
2 bob search 37
3 NaN search 40
4 ali enter 55
5 alice search 65
6 NaN purchase 67
7 ali exit 84
10 moji search 91
11 NaN purchase 97
12 bob exit 104
推荐阅读
- typo3 - Typo3 翻译不显示默认语言图像
- python - 自动打印姓氏
- php - Wordpress $wpdb->get_results 返回 null
- typescript - 如何在 Ionic3 中获取 Google 广告 ID?
- fido-u2f - 同一 Yubikey U2F 设备的重复注册
- html - Bootstrap 中的组下拉列表
- javascript - 解析 Json 数组推送 javascript
- c# - 在 Godaddy Linux 主机上部署 Asp.Net MVC 核心应用程序
- vue.js - 在Vue中测量页面时间
- ruby - 在使用“set”命令设置值时替换 ruby 中的变量值