Hen*_*kto 5 python merge series dataframe pandas
执行以下合并
import pandas as pd
s = pd.Series(range(5, 10), index=range(10, 15), name='score')
df = pd.DataFrame({'id': (11, 13), 'value': ('a', 'b')})
pd.merge(s, df, 'left', left_index=True, right_on='id')
Run Code Online (Sandbox Code Playgroud)
结果在这个数据框中:
score id value
NaN 5 10 NaN
0.0 6 11 a
NaN 7 12 NaN
1.0 8 13 b
NaN 9 14 NaN
Run Code Online (Sandbox Code Playgroud)
为什么 Pandas 将右侧数据框中的索引作为结果的索引,而不是左侧系列的索引,即使我指定了左合并和left_index=True
? 该文件说:
左:仅使用左框架中的键
我的解释与我实际得到的结果不同。我期望的是以下数据框。
score id value
10 5 10 NaN
11 6 11 a
12 7 12 NaN
13 8 13 b
14 9 14 NaN
Run Code Online (Sandbox Code Playgroud)
我正在使用 Python 3.7.5 和 Pandas 0.25.3。
发生的情况如下:
[0, 1]
。float
要设置索引,只需分配给它即可:
s2 = pd.merge(s, df, how='left', left_index=True, right_on='id')
s2.index = s.index
score id value
10 5 10 NaN
11 6 11 a
12 7 12 NaN
13 8 13 b
14 9 14 NaN
Run Code Online (Sandbox Code Playgroud)
您也可以合并s
(只是因为我不喜欢pd.merge
直接调用):
(s.to_frame()
.merge(df, how='left', left_index=True, right_on='id')
.set_axis(s.index, axis=0, inplace=False))
score id value
10 5 10 NaN
11 6 11 a
12 7 12 NaN
13 8 13 b
14 9 14 NaN
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
417 次 |
最近记录: |