与熊猫合并后设置索引?

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。

cs9*_*s95 2

发生的情况如下:

  1. 输出索引是索引/列合并键的交集[0, 1]
  2. 缺失的键被替换为 NaN
  3. NaN 导致索引类型向上转换为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)