我想合并两个数据帧,df1和df2,它们有多个索引列:
mi1 = pd.MultiIndex.from_tuples([('id', '0'), ('car', '2018')], names=['variable', 'year'])
mi2 = pd.MultiIndex.from_tuples([('id', '0'), ('car', '2019')], names=['variable', 'year'])
df1 = pd.DataFrame([['alice', 1], ['bob', 2]], columns=mi1)
df2 = pd.DataFrame([['alice', 2], ['bob', 3]], columns=mi2)
在df1和df2中,第一列索引引用变量名,而第二列索引引用年份。一些变量,如本例中的'id‘,与特定年份无关,因此值为'0’,在这里没有关联。
df1
variable id car
year 0 2018
0 alice 1
1 bob 2
df2
variable id car
year 0 2019
0 alice 2
1 bob 3
我想合并df1和df2以获得:
variable id car car
year 0 2018 2029
0 alice 1 2
1 bob 2 3
问题是,应用于df1和df2的使用'id‘列的合并函数返回一条错误消息:
df3 = pd.merge(df1, df2, on=('id', '0'), how="outer")
Traceback (most recent call last):
File "<input>", line 5, in <module>
File "C:\Users\AA\AppData\Roaming\Python\Python37\site-packages\pandas\core\reshape\merge.py", line 87, in merge
validate=validate,
File "C:\Users\AA\AppData\Roaming\Python\Python37\site-packages\pandas\core\reshape\merge.py", line 652, in __init__
) = self._get_merge_keys()
File "C:\Users\AA\AppData\Roaming\Python\Python37\site-packages\pandas\core\reshape\merge.py", line 1005, in _get_merge_keys
right_keys.append(right._get_label_or_level_values(rk))
File "C:\Users\AA\AppData\Roaming\Python\Python37\site-packages\pandas\core\generic.py", line 1580, in _get_label_or_level_values
f"The {label_axis_name} label '{key}' "
ValueError: The column label 'id' is not unique.
For a multi-index, the label must be a tuple with elements corresponding to each level.
这非常令人惊讶--也令人沮丧--因为merge函数的'on‘参数有一个元组作为参数,所以这里不应该有问题。我需要使用合并函数,因为在现实中,要合并的数据帧更加复杂,并且没有相同的id列。
你能告诉我如何解决这个问题并合并两个具有多索引列的数据帧吗?
发布于 2020-12-15 01:12:39
这里的问题是on
可以使用一个或多个列来合并两个数据帧
所以当你传递on=('id', '0')
的时候,它会认为你想合并两个字段。编写on=[('id', '0')]
可以消除歧义。一个要合并的列和两个指定为多索引一部分的标签:
df3 = pd.merge(df1, df2, on=[('id', '0')], how="outer")
https://stackoverflow.com/questions/65293068
复制相似问题