Error: Can only compare identically-labeled DataFrame objects
本问题已经有最佳答案,请猛点这里访问。
我有两个数据框:
prev_df:
1 2 3 4 5 6 7 8 | Time FO_SYMBOL TOTAL_VOLUME 0 14:20:41 ACC 6778.0 1 14:56:57 ADANIENT 4314.0 2 09:19:12 AUROPHARMA 1295.0 3 15:09:14 BAJAJ-AUTO 8339.0 4 09:19:12 HCLTECH 1431.0 5 09:19:12 HEROMOTOCO 1551.0 6 13:53:02 ULTRACEMCO 8284.0 |
df:
1 2 3 4 5 6 7 8 9 10 | Time FO_SYMBOL TOTAL_VOLUME 0 14:20:41 ACC 6778.0 1 14:56:57 ADANIENT 4314.0 2 09:19:12 AUROPHARMA 1295.0 3 15:09:14 BAJAJ-AUTO 8339.0 4 09:19:12 HCLTECH 1431.0 5 09:19:12 HEROMOTOCO 1551.0 6 13:53:02 ULTRACEMCO 8284.0 7 14:55:12 BHEL 8114.0 <<= NEW ROW 8 14:55:12 BHEL 8120.0 <<= NEW ROW |
我想比较两个数据框并找到不同的新行。 我希望我的输出如下:
结果:
1 2 | 0 14:55:12 BHEL 8114.0 <<= NEW ROW 1 14:55:12 BHEL 8120.0 <<= NEW ROW |
目前,我正在使用如下代码:
1 2 | indexes = (df != prev_df).any(axis=1) new_df = df.loc[indexes] |
但是,当在
Can only compare identically-labeled DataFrame objects
请帮忙。
您可以
1 2 | cols=prev_df.columns.intersection(df.columns).tolist() pd.concat([df, pd.concat([prev_df]*2)]).drop_duplicates(cols, keep=False) |
1 2 3 | Time FO_SYMBOL TOTAL_VOLUME 7 14:55:12 BHEL 8114.0 8 14:55:12 BHEL 8120.0 |
尝试这个
1 2 3 | df3 = pd.merge(df,prev_df,on='a',how='left',indicator=True) df3[df3['_merge']=='left_only'] df3.drop(['_merge'],axis=1,inplace=True) |
1 2 3 | Time FO_SYMBOL TOTAL_VOLUME 7 14:55:12 BHEL 8114.0 8 14:55:12 BHEL 8120.0 |