【发布时间】:2017-01-03 14:18:28
【问题描述】:
设置:两个熊猫数据框;需要将来自 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.head(20) 或类似的输出。