比较两个数据帧并将第二个数据帧中的新值添加到第一个数据帧

时间:2021-03-18 10:21:47

标签: python pandas dataframe

我有两个具有相同标题的数据帧

df1\

      **Date  prix moyen    mini   maxi H-Value C-Value**

0   17/09/20     8     6       9    122 2110122\
1   15/09/20     8     6       9    122 2110122\
2   10/09/20     8     6       9    122 2110122

df2

      **Date     prix   moyen    mini   maxi    H-Value C-Value**\
1   07/09/17     1.80    1.50    2.00   170     3360170\
1   17/09/20     8.00    6.00    9.00   122     2110122\
2   17/09/20     9.00    8.00   12.00   122     2150122\
3   17/09/20    10.00    8.00   12.00   122     14210122

我想单独比较两个数据框的 3 个参数(日期、H 值和 C 值),确定 df2 中存在的新值(df1 中未出现的值),然后将它们附加到 df1 中。

我正在使用

df_unique = df2[~(df2['Date'].isin(df1['Date']) & df2['H-Value'].isin(df1['H-Value']) & df2['C-Value'].isin(df1['C-Value']) )].dropna().reset_index(drop=True)

并且它无法识别 df2 中的新值。生成的表仅标识某些值,而不标识其他值。

我哪里出错了?

3 个答案:

答案 0 :(得分:1)

你有什么问题?

In [4]: df2[~(df2['Date'].isin(df1['Date']) & df2['H-Value'].isin(df1['H-Value']
   ...: ) & df2['C-Value'].isin(df1['C-Value']) )].dropna().reset_index(drop=Tru
   ...: e)
Out[4]: 
   Date      prix  moyen  mini  maxi  H-Value   C-Value
0     1  07/09/17    1.8   1.5   2.0      170   3360170
1     2  17/09/20    9.0   8.0  12.0      122   2150122
2     3  17/09/20   10.0   8.0  12.0      122  14210122

这些是 df2 中不存在于 df1 中的所有行。我觉得不错...

答案 1 :(得分:1)

我实际上能够解决问题。问题不在于用于比较两个数据集的命令,而在于 df2 中一列的数据格式与 df1 中的同一列不同,因此无法进行直接比较。

答案 2 :(得分:0)

这是我的尝试

df1 = pd.concat([df1, df2[~df2.set_index(['Date', 'H-Value', 'C-Value']).index.isin(df1.set_index(['Date', 'H-Value', 'C-Value']).index)]])