我想知道当值等于(“ NaN”)时如何保持一个值和一个以下的值。谢谢。示例
df = pd.DataFrame ({'list': ["juan", "NaN", "Maria", "NaN", "juan", "juanita", "juan", "NaN"]})
我只想继续
df = pd.DataFrame ({'list': ["juan", "NaN", "juan", "NaN"]})
仅当值为“ juan”且下面的值为“ NaN”时。但是我不想使用“ for”……我认为类似“ shift(1)”
答案 0 :(得分:1)
首先,我们将获取包含“ juan”并在其下一行包含“ NaN”的每一行的索引:
cond1 = df['list'] == 'juan'
cond2 = df['list'].shift(-1) == 'NaN'
idxs = cond1 & cond2
idxs = idxs[idxs == True]
我们差不多完成了,但是由于您也希望在最终输出中也包含后续的“ NaN”行,因此我们需要包括它们的索引:
idxs = np.array([[i,i+1] for i in idxs.index.values]).flatten()
要获得所需的输出,我们只需从原始df中选择以下索引:
output = df.loc[idxs]
哪个给了我们
list
0 juan
1 NaN
6 juan
7 NaN