有条件的dropna()熊猫

时间:2018-11-07 21:49:22

标签: python pandas nan

我有一个相当简单的问题:我想根据条件从DataFrame中删除行。 DataFrame看起来像这样:

Program        act
Original RO     A
Original RO    nan
Followup RO     B
Followup RO    nan
Integral RO    nan

我只想删除Original ROIntegral RO程序的空值。所以它应该像这样:

Program        act
Original RO     A
Followup RO     B
Followup RO    nan

在尝试对数据框的一部分进行某些操作并将其余部分保持原样时,我总是遇到问题。

我尝试过:

df.loc[df.Program.str.match('^(Original|Integral)')] = df.dropna()

但是不起作用。我究竟做错了什么? 预先感谢!

1 个答案:

答案 0 :(得分:1)

您可以使用isin()isna()检查条件并为数据框设置子集。

lst = ['Original RO', 'Integral RO']

df = df[~(df['Program'].isin(lst) & df['act'].isna())]

# Another one using drop.
# df = df.drop(df[(df['Program'].isin(lst) & df['act'].isna())].index)

print (df)

       Program  act
0  Original RO    A
2  Followup RO    B
3  Followup RO  NaN