如果另一个数据框中缺少值,如何在一个数据框中删除一行?

时间:2020-06-11 19:23:44

标签: python pandas dataframe

我有两个DataFrame(下面的示例)。如果df2 [city]是'nan',我想删除df1中任何等于df2 [patnum]的行。

例如:我想删除df1中的行2和3,因为它们包含'4',而df2中的patnum'4'在df2 ['city']中缺少值。

我该怎么做?

    df1
    Citer  Citee
0   1      2
1   2      4
2   3      5
3   4      7

    df2
    Patnum City
0   1      new york
1   2      amsterdam
2   3      copenhagen
3   4      nan
4   5      sydney

expected result:
    df1
    Citer  Citee
0   1      2
1   3      5

1 个答案:

答案 0 :(得分:0)

IIUC stack isindropna

这个想法是根据匹配返回一个True / False布尔值,然后在我们unstack数据帧之后删除那些行。

val = df2[df2['City'].isna()]['Patnum'].values

df3 = df1.stack()[~df1.stack().isin(val)].unstack().dropna(how="any")

   Citer  Citee
0    1.0    2.0
2    3.0    5.0

详细信息

df1.stack()[~df1.stack().isin(val)]

0  Citer    1
   Citee    2
1  Citer    2
2  Citer    3
   Citee    5
3  Citee    7
dtype: int64

print(df1.stack()[~df1.stack().isin(val)].unstack())


   Citer  Citee
0    1.0    2.0
1    2.0    NaN
2    3.0    5.0
3    NaN    7.0