繁体   English   中英

比较 2 个数据帧 Pandas,返回错误值

[英]Compare 2 dataframes Pandas, returns wrong values

有2个df

数据类型相同

df1 =

ID city      name    value
1  LA        John    111
2  NY        Sam     222
3  SF        Foo     333
4  Berlin    Bar     444

df2 =

ID  city      name   value
1   NY        Sam    223
2   LA        John   111
3   SF        Foo    335
4   London    Foo1   999
5   Berlin    Bar    444

我需要比较它们并生成一个新的 df,只有值在 df2 中,但不在 df1 中

由于某种原因,应用不同方法后的结果是错误的

到目前为止我已经尝试过

pd.concat([df1, df2],  join='inner', ignore_index=True)

但它会一起返回所有值

pd.merge(df1, df2, how='inner')

它返回 df1

然后这个

df1[~(df1.iloc[:, 0].isin(list(df2.iloc[:, 0])))

它返回 df1

所需的 output 是

ID city      name    value
1   NY        Sam    223
2   SF        Foo    335
3   London    Foo1   999

对所有列使用DataFrame.merge ,不带第一个和indicator参数:

c = df1.columns[1:].tolist()

或者:

c = ['city', 'name', 'value']

df = (df2.merge(df1,on=c, indicator = True, how='left', suffixes=('','_'))
       .query("_merge == 'left_only'")[df1.columns])

print (df)
   ID    city  name  value
0   1      NY   Sam    223
2   3      SF   Foo    335
3   4  London  Foo1    999

尝试这个:

print("------------------------------")
print(df1)

df2 = DataFrameFromString(s, columns)
print("------------------------------")
print(df2)

common = df1.merge(df2,on=["city","name"]).rename(columns = {"value_y":"value", "ID_y":"ID"}).drop("value_x", 1).drop("ID_x", 1)
print("------------------------------")
print(common)

OUTPUT:

------------------------------
   ID    city  name  value
0  ID    city  name  value
1   1      LA  John    111
2   2      NY   Sam    222
3   3      SF   Foo    333
4   4  Berlin   Bar    444
------------------------------
   ID    city  name  value
0   1      NY   Sam    223
1   2      LA  John    111
2   3      SF   Foo    335
3   4  London  Foo1    999
4   5  Berlin   Bar    444
------------------------------
     city  name  ID  value
0      LA  John   2    111
1      NY   Sam   1    223
2      SF   Foo   3    335
3  Berlin   Bar   5    444

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM