gpt4 book ai didi

python - 在一级合并多索引数据帧

转载 作者:行者123 更新时间:2023-11-30 22:01:41 24 4
gpt4 key购买 nike

我正在尝试在第一级连接两个多索引数据帧。我尝试过其他一些解决方案,例如 this one但对我来说不太有效。我期望以某种方式进行外部联接,但我也希望匹配索引中的值被 df2 中的值替换。否则,一些有关如何在第一级轻松执行外部合并的有用提示也将受到赞赏。

设置:

dates1 = pd.to_datetime(['1/11/2016','5/11/2016','9/11/2016'])
dates2 = pd.to_datetime(['1/11/2016','4/11/2016','8/11/2016','9/11/2016'])
v1 = pd.MultiIndex.from_arrays([[112,112,112], dates1])
v2 = pd.MultiIndex.from_arrays([[113,113,113, 113], dates2])
df1 = pd.DataFrame({'active1':[3,3,4],'active2':[5,1,10]}, index = v1)
df2 = pd.DataFrame({'active1':[1,22,12,5],'active2':[5,1,12,13]}, index = v2)

print(df1)
active1 active2
112 2016-01-11 3 5
2016-05-11 3 1
2016-09-11 4 10

print(df2)
active1 active2
113 2016-01-11 1 5
2016-04-11 22 1
2016-08-11 12 12
2016-09-11 5 13

预期输出:

                  active1  active2
112 2016-01-11 1 5
2016-04-11 22 1
2016-05-11 3 1
2016-08-11 12 12
2016-09-11 5 13

最佳答案

由于 0 级值是唯一的,因此忽略它,使用 .combine_first 合并另一个索引上的 DataFrames,优先考虑 df2 中的值code> 匹配时,然后将索引添加回 df1

的末尾
(df2.reset_index(0, drop=True)
.combine_first(df1.reset_index(0, drop=True))
.assign(l0 = df1.index[0][0])
.set_index('l0', append=True)
.swaplevel(0,1)
.rename_axis([None, None], 0))

输出

                active1  active2
112 2016-01-11 1.0 5.0
2016-04-11 22.0 1.0
2016-05-11 3.0 1.0
2016-08-11 12.0 12.0
2016-09-11 5.0 13.0
<小时/>

如果您的 DataFrames 中有 null 值,并且您不希望 df2 中的 nulls使用 df1 更新,然后您可以首先将它们替换为虚拟值(例如 999999),并在合并后用 NaN 替换回来。

关于python - 在一级合并多索引数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53980900/

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