有2个dfs
数据类型相同
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
所需的输出是
ID city name value
1 NY Sam 223
2 SF Foo 335
3 London Foo1 999
答案 0 :(得分:4)
所有没有第一和indicator
参数的列都使用DataFrame.merge
:
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
答案 1 :(得分:0)
尝试一下:
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)
输出:
------------------------------
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