gpt4 book ai didi

python - 将 Pandas Multiindexed DataFrame 与 Singleindexed Pandas DataFrame 合并

转载 作者:行者123 更新时间:2023-12-01 13:14:30 25 4
gpt4 key购买 nike

我想加入两个 DataFrame。第一个是多索引 DataFrame,第二个是简单的 DataFrame。

import pandas as pd
import numpy
a = pd.DataFrame({'a': {('x', 0) : 1, ('x', 1) : 2, ('y', 0): 3, ('y', 1): 5}, 'b': {('x', 0) : 2, ('x', 1) : 4, ('y', 0): 2, ('y', 1): 7}}).T
print(a)

# x y
# 0 1 0 1
# a 1 2 3 5
# b 2 4 2 7

b = pd.DataFrame({'y': np.arange(10), 'z': np.arange(10, 20)})

magical_merge(left=a, right=b, on='y')

# x y z
# 0 1 0 1 0 1
# a 1 2 3 5 13 15
# b 2 4 2 7 12 17

现在我正在通过循环遍历第二个索引来执行此操作:

merged = []
for l in [0, 1]:
m = pd.merge(left=a.xs(l, axis=1, level=1),right=b, on='y')
m_indices = pd.MultiIndex.from_product([m.columns, [l]])
m.columns = m_indices
merged.append(m)

result = pd.concat(merged, axis=1).sort_index(axis=1)

pandas 自己能以某种方式做到这一点吗?

最佳答案

您需要在多索引 df 上使用 stackreset_index(在您的例子中是 a)。接下来,mergeset_index 返回。最后,使用 rename_axis 美化多索引名称并使用 unstack 放回多索引列:

a.stack().reset_index().merge(b, on='y').set_index(['level_0', 'level_1']) \
.rename_axis(index=[None, None]).unstack()

Out[335]:
x y z
0 1 0 1 0 1
a 1 2 3 5 13 15
b 2 4 2 7 12 17

关于python - 将 Pandas Multiindexed DataFrame 与 Singleindexed Pandas DataFrame 合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56803959/

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