首页 > 解决方案 > 保留满足条件的行和相邻行

问题描述

对于 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 nameisNaN以及恰好在这些行之前和之后的行。我可以通过命令for来做到这一点。if但是有没有更巧妙的方法来做到这一点?

标签: pythonpandasnumpy

解决方案


使用Series.isnathenSeries.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

推荐阅读