微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从具有相等值的几个数据框中删除行

如何解决从具有相等值的几个数据框中删除行

我有两个从几个 csv 文件获取的数据框。例如:

df1
    data1   data2   data3
0   cow     cat     53
1   girl    boy     12  
2   monkey  island  30
3   lucas   arts    14

df2
    data1   data2   data3
0   girl    boy     50
1   cover   disc    45  
2   girl    boy     47
3   pen     pencil  15
4   book    note    30
5   lucas   arts    15


df2
    data1   data2   data3
0   cover   disc    45
1   pen     pencil  15
2   book    note    30

我想从 df2 中删除那些在 df1 中具有相同 data1 和 data2 值的行,这样最后我将得到一个更新的 df2。到目前为止,我已经完成了以下工作:

    file1="fileA.csv"
    file2="fileB.csv"
    df1=pd.read_csv(file1)
    df2=pd.read_csv(file2)
    cond = df1[['data1','data2']].isin(df2[['data1','data2']])
    df2.drop(df1[cond].index,inplace=True)
    df2.to_csv("fileBUpdtated.csv",index=False)

但是我没有得到我需要的结果,我错过了什么?

解决方法

你需要DataFrame.merge

cols = ['data1','data2']
df2 = df2.merge(df1[cols],on=cols,how='left',indicator=True)\
    .loc[lambda x: x._merge.ne('both')].drop('_merge',axis=1)
print(df2)


   data1   data2  data3
1  cover    disc     45
3    pen  pencil     15
4   book    note     30
,

您可以将 df1 附加到 df2,然后是 drop_duplicates 并保留左侧和来自 df2 的行

df2.append(df1,ignore_index=True).drop_duplicates(['data1','data2'],keep=False).loc[:df2.index.max()]

出:

   data1   data2  data3
1  cover    disc     45
3    pen  pencil     15
4   book    note     30
,

我发现这样做的最佳选择如下:

print (df2[~df2.isin(df1[['data1','data2']])])

在这里,您要针对 df1(子集数据帧中的 2 个特定列)中的值搜索 df2(超集数据帧)每一行中的值。如果没有找到,那么您想从 df2 打印这些记录。

这个不做合并。相反,它使用布尔值和索引。

输出结果为:

   data1   data2  data3
1  cover    disc     45
3    pen  pencil     15
4   book    note     30

或者,您可以执行以下操作:

您可以在两者中找到共同项,然后排除它们并打印值。

如果您想将它们从 df2 中删除,请将其重新分配回 df2。

common = df2.merge(df1,on=['data1','data2'])
df2 = df2[(~df2.data1.isin(common.data1))&(~df2.data2.isin(common.data2))]
print (df2)

输出结果为:

   data1   data2  data3
1  cover    disc     45
3    pen  pencil     15
4   book    note     30
,

让我们试试

out = df2[df2[['data1','data2']].apply(tuple,1).isin(df1[['data1',1))]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?