熊猫合并:列标签不是唯一的

时间:2019-07-22 15:56:51

标签: pandas

考虑两个表:一个包含所有索引,另一个包含某些索引的数据。目的是为所有索引创建一个条目,而不管它是否有数据,如果有,则添加它。类似于SQL中的LEFT OUTER JOIN。 名为dates的索引表可能类似于:

     name week
0  name_0    0
1  name_0    1
2  name_0    2
3  name_0    3
4  name_0    4
5  name_0    5
6  name_1    0
7  name_1    1
8  name_1    2

因此该表将包含name_0的6周和name_1的3周。 而名为data_holes的数据表可能是:

     name week otherdata
0  name_0    1         2
1  name_0    2         5
2  name_0    5        20
3  name_1    1         5

所需的合并结果为:

name week other_data
0  name_0    0     N/A
1  name_0    1      2
2  name_0    2      5
3  name_0    3     N/A    
4  name_0    4     N/A
5  name_0    5      20
6  name_1    0     N/A
7  name_1    1     N/A
8  name_1    2      5

但是,在使用dates.merge(data_holes, how='left', on=['name','week'])时,我遇到了一个错误:

  

ValueError:列标签“ week”不是唯一的。

2 个答案:

答案 0 :(得分:3)

我知道该问题已经得到解答,但上次出现关于 not being unique 操作中提到的 merge 列的错误时,我发现这是因为在其中一个要合并的数据帧重复了。

例如在以下代码中:

df1.merge(df2, how='left', on=['col1','col2'])

如果错误指出 col2 不是唯一的,则数据框 df1 或 df2 中的 2 个或更多列可能具有名称“col2”。 当数据框即将进行合并时,列值不一定必须完全相同,才能在“on”参数上仅抛出 2 个或更多具有相同名称的列。 如果上面的答案不能解决问题,也请检查这个。

答案 1 :(得分:0)

我都尝试过

  • dates.merge(data_holes, how='left')
  • dates.merge(data_holes, how='left', on=['name','week'])

并获得正确的结果。 实际上,不需要on=['name','week']),因为默认情况下 merge 在所有公共列上合并。

也许您的 Python Pandas 的版本“过旧”? 我有:

  • python:3.7.0.final.0
  • 熊猫:0.24.2
  • numpy:1.16.3

如果您使用的是旧版本,请升级到上述指示。