关于python:错误:只能比较标记相同的DataFrame对象

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]

但是,当在df中填充新行时,出现以下错误:

Can only compare identically-labeled DataFrame objects

请帮忙。


您可以concatdrop_duplicates

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