Pandas 合并 2 个键,第二个键 return 第一个原始正确第二个 Nan

Pandas merge 2 keys, second key return first raw correct second Nan

合并 2 个数据集时,我在每个类别的第二个原始数据集上得到 NAN。

这是一个用来说明问题的玩具数据集:

df1=pd.DataFrame({'Num':[1,1,2,3,3],
                  'date':['1995-09-01','1995-10-04','1995-11-07','1995-11-10','1995-11-25'],
                  'A':[42.5,40,38,40,28],
                  'B': [13.3,12.3,12.2,11,10]})

df2=pd.DataFrame({'Num':[1,1,1,1,2,2,3,3,3,3],
                  'date':['1995-09-01','1995-09-02','1995-10-03','1995-10-04','1995-10-05','1995-11-07','1995-11-08','1995-11-09','1995-11-10','1995-11-25'],
                  'C':[42.5,39.5,37.2,40,41,38,38.2,39.7,40,28],
                  'D': [13.3,12.8,12.1,12.3,13.3,12.2,12.4,12.8,11,10]})

在运行之后的代码如下:

data = pd.merge(df1, df2,  how='left', left_on=['Num','date'], right_on = ['Num','date'])

这是我应该得到的(我用这个玩具数据集做的)

然而,对于我的真实数据集,我得到:

我检查了数据类型并且它们匹配,并且没有空值或 nans 出现在键上。数字格式为 int64,日期格式为 datetime64

我会选择:

df1.merge(df2, on=['Num','date'])

如果您遇到过类似上述问题的情况,以下是我为解决该问题所做的工作:

  • 检查两个数据帧上的公共键匹配的数据类型

如果问题仍然存在,请检查您愿意对其进行合并的 column/s(键)的行。

在我的例子中,“num”键没问题。但是,与 df1 相比,“date”键在 df2 中呈现不同的行。这解释了在合并之后,一些行将包含数据(在右侧部分)而其他一些则不会。

考虑到我选择的合并类型 (how="left)":

  • 合并数据框的最终形状是正确的。
  • 所有行都包含有关左侧数据框 (df1) 的正确信息
  • 考虑到第一个和第二个数据帧中(两个键之一)缺少匹配,合并数据帧右侧的一些行将包含 NAN。