为什么内部联接在熊猫中如此奇怪?
例如:
/note
/note/to
/note/from
/note/heading
/note/body
/note/body/content
输出:
import pandas as pd
import io
t1 = ('key,col1\n'
'1,a\n'
'2,b\n'
'3,c\n'
'4,d')
t2 = ('key,col2\n'
'1,e\n'
'2,f\n'
'3,g\n'
'4,h')
df1 = pd.read_csv(io.StringIO(t1), header=0)
df2 = pd.read_csv(io.StringIO(t2), header=0)
print(df1)
print()
print(df2)
print()
print(df2.join(df1, on='key', how='inner', lsuffix='_l'))
如果我没有指定 key col1
0 1 a
1 2 b
2 3 c
3 4 d
key col2
0 1 e
1 2 f
2 3 g
3 4 h
key_l col2 key col1
0 1 e 2 b
1 2 f 3 c
2 3 g 4 d
,则说明
lsuffix
这个函数与SQL的JOIN有什么不同?为什么要创建带后缀的额外“密钥”列?为什么只有3行? 我希望它输出这样的东西:
ValueError: columns overlap but no suffix specified: Index(['key'], dtype='object')
答案 0 :(得分:1)
首先要做的事情:
你想要的是合并
df1.merge(df2)
join
默认合并index
。您可以指定on
参数,该参数仅表示左侧的哪一列与右侧的索引匹配。
这些可能有助于说明
df1.set_index('key').join(df2.set_index('key'))
df1.join(df2.set_index('key'), on='key')
您的示例将df2
的{{1}}索引与[0, 1, 2, 3]
的{{1}}列key
匹配,后面看起来像df1
这就是[1, 2, 3, 4]
NaN
为col2
时key_l
4
df1.join(df2, on='key', lsuffix='_l', how='outer')
{{1}}