【问题标题】:is there a function to delete (in df1) the different rows in two df?是否有删除(在df1中)两个df中不同行的功能?
【发布时间】:2020-06-07 00:03:49
【问题描述】:

我有两个不同长度的 DataFrame。在 df1 中,我也需要只保留 df2 中的 df1 行,并删除所有不在 df1 中的行。 我使用了下面的函数来查找 2 df 之间的差异,但我无法删除 df1 中的所有行。

df1[~(df1['F_Code'].isin(df2['Codice']))]

【问题讨论】:

  • df1[(df1['F_Code'].isin(df2['Codice']))]?

标签: python pandas dataframe spyder


【解决方案1】:

我想你正在寻找这个命令:

pandas.merge(df,df2,how='inner')

您可以在此处https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html 了解更多关于pandas.merge 的信息。

这很像 SQL JOIN 关键字。

【讨论】:

  • 合并函数在两个df的公共行之间创建一个新列。我需要删除(在 df1 中)两个 df 之间的不同行。
  • 你确定。我对我的答案很有信心,因为我测试过它,你能告诉我为什么你认为它是错误的答案吗?
【解决方案2】:

您似乎想要合并列上具有不同列名的两个数据框。在这种情况下,这就是您所需要的:

import pandas as pd

# Create Example data
df1 = pd.DataFrame({'F_Code': [1,2, 8], 'a': [3,4,5]})
df2 = pd.DataFrame({'Codice': [1,2,3], 'b': [1,2,5]})

df = pd.merge(df1, df2, how='inner', left_on='F_Code', 
              right_on='Codice').drop(columns=df2.columns)

结果:


    F_Code  a
0   1       3
1   2       4

【讨论】:

  • 好的,这个函数保留了两个df之间的公共行,但它复制了它们。我需要删除 df1 中不等于的行。
  • 你的意思是df2的列也加了?我更新了答案,现在它只返回来自 df1 的列。
  • 您的解决方案在逻辑上是正确的,但在我的情况下,它重复了行数。我用这段代码解决了它: df_new = [(df1['F_Code'].isin(df2['Codice']))] (我消除了〜)。感谢您的支持。
猜你喜欢
  • 2019-09-13
  • 2018-12-24
  • 1970-01-01
  • 2020-06-17
  • 2020-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多