合并两个具有重叠 MultiIndex 列的 DataFrame
Posted
技术标签:
【中文标题】合并两个具有重叠 MultiIndex 列的 DataFrame【英文标题】:Merge two DataFrames with overlapping MultiIndex columns 【发布时间】:2021-05-29 19:09:58 【问题描述】:我正在尝试找到一种简单的方法将两个 MultiIndex 数据框合并在一起,以添加新列并合并现有列。例如,如果我有两个数据框
d1_columns = pd.MultiIndex.from_product([["A", "B",], ["1", "2"]])
d1_index = pd.date_range("2020-01-01", "2020-01-5", freq="D")
d1 = pd.DataFrame(random.rand(5, 4), columns=d1_columns, index=d1_index)
print(d1)
A B
1 2 1 2
2020-01-01 0.381909 0.487480 0.389250 0.853449
2020-01-02 0.752374 0.508806 0.491892 0.786918
2020-01-03 0.019655 0.537763 0.263242 0.378302
2020-01-04 0.460276 0.227113 0.423472 0.514639
2020-01-05 0.046673 0.864282 0.223340 0.929049
d2_columns = pd.MultiIndex.from_product([["B", "C"], ["1", "2"]])
d2_index = pd.date_range("2020-01-03", "2020-01-7", freq="D")
d2 = pd.DataFrame(random.rand(5, 4), columns=d2_columns, index=d2_index)
print(d2)
B C
1 2 1 2
2020-01-03 0.495979 0.888207 0.776861 0.531693
2020-01-04 0.408030 0.545351 0.452913 0.768284
2020-01-05 0.374996 0.593571 0.925979 0.398629
2020-01-06 0.085565 0.845354 0.792325 0.501057
2020-01-07 0.780985 0.390948 0.731769 0.488155
如果我想合并它们,我会将重叠的列分开,而新列可以正常工作:
df = d1.merge(d2, left_index=True, right_index=True, how="outer")
print(df)
A B_x B_y \
1 2 1 2 1 2
2020-01-01 0.381909 0.487480 0.389250 0.853449 NaN NaN
2020-01-02 0.752374 0.508806 0.491892 0.786918 NaN NaN
2020-01-03 0.019655 0.537763 0.263242 0.378302 0.495979 0.888207
2020-01-04 0.460276 0.227113 0.423472 0.514639 0.408030 0.545351
2020-01-05 0.046673 0.864282 0.223340 0.929049 0.374996 0.593571
2020-01-06 NaN NaN NaN NaN 0.085565 0.845354
2020-01-07 NaN NaN NaN NaN 0.780985 0.390948
C
1 2
2020-01-01 NaN NaN
2020-01-02 NaN NaN
2020-01-03 0.776861 0.531693
2020-01-04 0.452913 0.768284
2020-01-05 0.925979 0.398629
2020-01-06 0.792325 0.501057
2020-01-07 0.731769 0.488155
有没有一种简单的方法可以合并重叠的列,以便将新数据添加到现有列中(是否覆盖以前的数据无关紧要),所以输出看起来像这样?
A B C
1 2 1 2 1 2
2020-01-01 0.633182 0.335651 0.072520 0.578472 NaN NaN
2020-01-02 0.785482 0.562421 0.658556 0.557171 NaN NaN
2020-01-03 0.755049 0.575611 0.592934 0.735094 0.647117 0.306296
2020-01-04 0.035943 0.792211 0.002617 0.159366 0.320691 0.825184
2020-01-05 0.932623 0.643129 0.778002 0.581527 0.718405 0.289289
2020-01-06 NaN NaN 0.085565 0.845354 0.012412 0.960234
2020-01-07 NaN NaN 0.780985 0.390948 0.444406 0.210821
谢谢
【问题讨论】:
【参考方案1】:看来你想要
df = d1.combine_first(d2)
或
df = d2.combine_first(d1)
取决于应首选哪个帧的值。
【讨论】:
以上是关于合并两个具有重叠 MultiIndex 列的 DataFrame的主要内容,如果未能解决你的问题,请参考以下文章
为啥在具有一级索引的 MultiIndex 列的 pandas DataFrame 中表现不同?
合并两个 pandas.core.indexes.multi.MultiIndex
在 Pandas 中将两个 MultiIndex 级别合并为一个