【问题标题】:How to drop a row in one dataframe if missing value in another dataframe?如果在另一个数据框中缺少值,如何在一个数据框中删除一行?
【发布时间】:2020-10-01 13:07:08
【问题描述】:

我有两个 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 行和第 3 行(假设从零开始的索引)?
  • 请输入准确的预期输出。

标签: python pandas dataframe


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 2016-09-15
    相关资源
    最近更新 更多