[英]Comparing two data frames with different columns and getting the differences
我有一個與此處類似的問題比較兩個數據幀並獲得差異但是 df1 中的列是 df2 中列的子集。
df1:
Date Fruit Num Color
2013-11-24 Banana 22.1 Yellow
2013-11-24 Orange 8.6 Orange
2013-11-24 Apple 7.6 Green
2013-11-24 Celery 10.2 Green
df2:
Date Fruit Num Color A
2013-11-24 Banana 22.1 Yellow 1
2013-11-24 Orange 8.6 Orange 2
2013-11-24 Apple 7.6 Green 3
2013-11-24 Celery 10.2 Green 4
2013-11-25 Apple 22.1 Red 5
2013-11-25 Orange 8.6 Orange 6
我想通過僅比較這些列的共同點來獲得兩個 df 的差異。 所以我期望得到的結果是
Date Fruit Num Color A
4 2013-11-25 Apple 22.1 Red 5
5 2013-11-25 Orange 8.6 Orange 6
有沒有辦法這樣做? 任何幫助表示贊賞。
如果您在df1
或df2[df1.columns]
中沒有重復項,您可以嘗試將.drop_duplicates
與keep=False
一起使用:
res = pd.concat([df1, df2[df1.columns]]).drop_duplicates(keep=False)
您的示例數據框的結果:
Date Fruit Num Color
4 2013-11-25 Apple 22.1 Red
5 2013-11-25 Orange 8.6 Orange
PS:據我所知,其他答案也僅涵蓋非重復案例。
如果您在df1
或df2[df1.columns]
中確實有重復項並希望將它們保留在結果中,您可以嘗試:
res = pd.concat(
[df1.drop_duplicates(), df2[df1.columns].drop_duplicates()]
).drop_duplicates(keep=False).merge(
pd.concat([df1, df2[df1.columns]]), on=list(df1.columns), how="inner"
)
例如,如果df2
看起來像
Date Fruit Num Color A
2013-11-24 Banana 22.1 Yellow 1
2013-11-24 Orange 8.6 Orange 2
2013-11-24 Apple 7.6 Green 3
2013-11-24 Celery 10.2 Green 4
2013-11-25 Apple 22.1 Red 5
2013-11-25 Apple 22.1 Red 5
2013-11-25 Orange 8.6 Orange 6
那么結果將是
Date Fruit Num Color
0 2013-11-25 Apple 22.1 Red
1 2013-11-25 Apple 22.1 Red
2 2013-11-25 Orange 8.6 Orange
如果您不想在結果中保留重復項,那么只需執行
res = pd.concat(
[df1.drop_duplicates(), df2[df1.columns].drop_duplicates()]
).drop_duplicates(keep=False)
首先你得到 df1 的列名
df1_columns = df1.columns # ["Date", "Fruit", "Num", "Color"]
現在您創建一個新的 df2 dataframe 只有 df1 列
df2_filtered = df2[df1_columns]
現在您可以應用其他問題的解決方案。
#concatenate both dataframes
df = pd.concat([df1, df2_filtered])
df = df.reset_index(drop=True)
#group by
df_gpby = df.groupby(list(df.columns))
# get index of unique records
idx = [x[0] for x in df_gpby.groups.values() if len(x) == 1]
#filter
df.reindex(idx)
希望能幫助到你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.