gpt4 book ai didi

python - 将 pandas 数据帧映射到多个键上作为列或多索引

转载 作者:行者123 更新时间:2023-12-01 03:44:16 26 4
gpt4 key购买 nike

设置:两个 pandas 数据框; df2 中的数据需要添加到 df1 中,如下所述:

  • df1 和 df2 是具有相同四个级别的多重索引
  • df1 包含的行数多于 df2
  • df1 对于四个索引级别中的三个级别的每个唯一组合都有一个值的三个副本(按行);也就是说,每行仅在第 4 层有所不同
  • df2 仅在其他 3 个级别上与 df1 部分对齐(df2 包含无关行)
  • df2 仅包含一列

我想将 df2 的一列中的值添加到 df1 中三个相应级别匹配的行的所有三个副本。

了解到 pandas 中“未实现在 multiIndex 上进行多级重叠合并”后,我建议映射这些值,但尚未找到一种方法来映射(多个)索引级别或多列,如果将索引级别重置为列:

df1 = pd.DataFrame(np.array([['Dec', 'NY', 'Ren', 'Q1', 10],
['Dec', 'NY', 'Ren', 'Q2', 12],
['Dec', 'NY', 'Ren', 'Q3', 14],
['Dec', 'FL', 'Mia', 'Q1', 6],
['Dec', 'FL', 'Mia', 'Q2', 8],
['Dec', 'FL', 'Mia', 'Q3', 17],
['Apr', 'CA', 'SC', 'Q1', 1],
['Apr', 'CA', 'SC', 'Q2', 2],
['Apr', 'CA', 'SC', 'Q3', 3]]), columns=['Date', 'State', 'County', 'Quarter', 'x'])

df1.set_index(['Date', 'State', 'County', 'Quarter'], inplace=True)

df2 = pd.DataFrame(np.array([['Dec', 'NY', 'Ren', 0.4],
['Dec', 'FL', 'Mia', 0.3]]), columns=['Date', 'State', 'County', 'y'])

df2.set_index(['Date', 'State', 'County', 'y'], inplace=True)

df_combined = df1['Date', 'State', 'County'].map(df2)

最佳答案

您可以临时更改df1来更改索引以进行连接:

df_combined = df1.reset_index(3).join(df2,how='left')

>>> df_combined
level_3 x y
Apr CA SC Q1 1 NaN
SC Q2 2 NaN
SC Q3 3 NaN
Dec FL Mia Q1 6 0.3
Mia Q2 8 0.3
Mia Q3 17 0.3
NY Ren Q1 10 0.4
Ren Q2 12 0.4
Ren Q3 14 0.4

df_combined.set_index('level_3',append=True, inplace=True)
df_combined.index.rename(None,3,inplace=True)

>>> df_combined
x y
Apr CA SC Q1 1 NaN
Q2 2 NaN
Q3 3 NaN
Dec FL Mia Q1 6 0.3
Q2 8 0.3
Q3 17 0.3
NY Ren Q1 10 0.4
Q2 12 0.4
Q3 14 0.4

reset_index方法用于临时将df2中没有的索引转为列,以便可以进行正常的连接。完成后,将该列重新转换为索引。

关于python - 将 pandas 数据帧映射到多个键上作为列或多索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39174255/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com