我正在使用Python3.8.6与熊猫版本1.2.4
我想用这个dataframe在前面的行上做一个自联接:
bar
one
index
0 0.238307
1 0.610819 所以我在做熊猫合并之前准备了数据
“左”合并数据如下所示:
bar
one
0 0.238307
1 0.610819 “右”合并数据如下所示:
bar index1
one
0 0.238307 1
1 0.610819 2现在我尝试这个合并:
pd.merge(left, right, left_index=True, right_on=('index1',''), suffixes=('_n','_p'))它抛出一个ValueError: len(right_on)必须等于“左”索引中的级别数。
对我来说,这毫无意义。重要的是('index1,'')的值与left.index相当
我遗漏了什么?
我还尝试了以下几点:
index bar
one
0 0 0.972453
1 1 0.278209 正确的
bar index1
one
0 0.972453 1
1 0.278209 2合并表达式
pd.merge(left,right,left_on=('index',''),right_on=('index1',''),suffixes=('_n','_p'))错误
raise KeyError(key)
KeyError: ''注意:
left.loc[:,('index','')]
0 0
1 1
2 2
right.loc[:,('index1','')]
0 1
1 2
2 3所以再一次,一些我不明白的问题
谢谢马丁
发布于 2021-06-16 19:29:35
这是不是你所期望的:
>>> pd.merge(dfL, dfR, left_index=True, right_on='index1', suffixes=('_n','_p'))
bar_n bar_p index1
one one
0 0.610819 0.238307 1如果是merge 文档:如果是MultiIndex,则其他DataFrame中的键数(索引或列数)必须匹配级别数。
发布于 2021-06-17 00:54:38
我发现的答案是:
left=left.set_index(('index',''))
right=right.set_index(('index1',''))
dfJoined=pd.merge(left,right,left_index=True,right_index=True,suffixes=('_n','_p'))产生
bar_n bar_p
one one
1 1.719833 -0.540152 #different random numbers from question abovehttps://stackoverflow.com/questions/68007737
复制相似问题