【问题标题】:Remove df rows based on column of another df根据另一个df的列删除df行
【发布时间】:2020-04-06 01:43:21
【问题描述】:

有两个带有值的df


df 1 


number    1          2     3

12354    mark        24  london
12356    jacob       25  denver
12357    luther      26  berlin
12358    john        27  tokyo
12359    marshall    28  cairo
12350    ted         29  delhi

另一个 df 2

number       

12354   

12357    

12359    


删除 df1 中具有与 df2 相同列值的所有行

预期输出


0          1          2     3

12356    jacob       25  denver
12358    john        27  tokyo
12350    ted         29  delhi

【问题讨论】:

  • df1[~df1.number.isin(df2.number)]
  • @anky_91 必须根据 df2 中的列删除列
  • @anky_91 编辑了问题你能重新打开问题吗?
  • df2.merge(df1,on='number',how='outer',indicator=True).query("_merge=='right_only'") ??
  • ValueError: 您正在尝试合并 object 和 int64 列。如果你想继续,你应该使用 pd.concat @anky_91

标签: python pandas dataframe


【解决方案1】:

这里是一个例子:

import pandas as pd
from io import StringIO

df1 = """
number,1,2,3
12354,mark,24,london
12356,jacob,25,denver
12357,luther,26,berlin
12358,john,27,tokyo
12359,marshall,28,cairo
12350,ted,29,delhi
"""
df2 = """
number
12354
12357
12359
"""

df_df2 = pd.read_csv(StringIO(df2), sep=',')
df_df1 = pd.read_csv(StringIO(df1), sep=',')

df=pd.merge(df_df1,df_df2, indicator=True, how='outer').query('_merge=="left_only"')

df.drop(['_merge'], axis=1, inplace=True)
df.rename(columns={'number': '0'}, inplace=True)
print(df)

【讨论】:

    猜你喜欢
    • 2017-04-22
    • 2020-10-24
    • 2019-10-10
    • 2019-11-02
    • 2022-12-03
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 2023-02-18
    相关资源
    最近更新 更多