考虑两个表:一个包含所有索引,另一个包含某些索引的数据。目的是为所有索引创建一个条目,而不管它是否有数据,如果有,则添加它。类似于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”不是唯一的。
答案 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 的版本“过旧”? 我有:
如果您使用的是旧版本,请升级到上述指示。