python - 如何合并 `pandas` 中的部分多索引

标签 python pandas dataframe

我有两个 DataFrame。 df1 是多索引,df2 是标准索引。如何通过在 df2.indexdf1.get 的每次匹配中重复来自 df2 的值来合并它们。

例子

import pandas as pd
import numpy as np
idx1 = pd.MultiIndex.from_product([['bar', 'baz', 'foo'],['one','two']])
idx2 = ['bar', 'baz']
df1 = pd.DataFrame(np.random.randn(6, 2), index=idx1, columns=['A', 'B'])
df2 = pd.DataFrame(np.random.randn(2, 1), index=idx2, columns=['C'])

如果df1

                A         B
bar one  0.690827 -0.627957
    two -0.080936 -1.330712
baz one  1.395178 -0.099748
    two -0.116789  0.723990
foo one  0.313067  0.853808
    two  0.409727 -0.529002

df2

            C
bar -0.773924
baz  0.099662

如何获取merge like?

                A         B         C
bar one  0.690827 -0.627957 -0.773924
    two -0.080936 -1.330712 -0.773924
baz one  1.395178 -0.099748  0.099662
    two -0.116789  0.723990  0.099662
foo one  0.313067  0.853808  NaN
    two  0.409727 -0.529002  NaN

最佳答案

您可以为索引命名并在合并中使用它,而无需像下面那样重新索引或重置索引

df1.index.set_names(["id_1", "id_2"], inplace=True)
df1.merge(df2, left_on="id_1", right_index=True, how="left")

结果

                   A          B          C
id_1 id_2                                 
bar  one    0.690827  -0.627957  -0.773924
     two   -0.080936  -1.330712  -0.773924
baz  one    1.395178  -0.099748   0.099662
     two   -0.116789   0.723990   0.099662
foo  one    0.313067   0.853808        NaN
     two    0.409727  -0.529002        NaN

关于python - 如何合并 `pandas` 中的部分多索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58356559/

相关文章:

python - 从 Pandas 列中的元素中提取文本,写入新列

python - 为 pypy 构建 pandas

python-3.x - Python pandas 按枚举类值对数据帧进行排序

python - pandas - 使用子集 groupby 的派生计算部分更新 DataFrame

python - 基于两列合并数据框

python - 类型错误 : XXXXX got an unexpected keyword argument 'XXXXXX'

python - 如何使用 google customsearch API 查询高级搜索?

python - 在 Python 中将小时和分钟转换为总分钟

python - 子进程在线程死亡时死亡

python - 在 python 中使用多处理时无法使用所有处理器