[英]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.