我有一个像这样的 pandas DataFrame:
import pandas as pd
import numpy as np
data1 = np.repeat(np.array(range(3), ndmin=2), 3, axis=0)
columns1 = pd.MultiIndex.from_tuples([('foo', 'a'), ('foo', 'b'), ('bar', 'c')])
df1 = pd.DataFrame(data1, columns=columns1)
print(df1)
foo bar
a b c
0 0 1 2
1 0 1 2
2 0 1 2
还有一个这样的:
data2 = np.repeat(np.array(range(3, 5), ndmin=2), 3, axis=0)
columns2 = ['d', 'e']
df2 = pd.DataFrame(data2, columns=columns2)
print(df2)
d e
0 3 4
1 3 4
2 3 4
现在,我想用 df2 替换 df1 的“bar”,但单级索引的常规语法似乎不起作用:
df1['bar'] = df2
print(df1)
foo bar
a b c
0 0 1 NaN
1 0 1 NaN
2 0 1 NaN
当我想要得到的是:
foo bar
a b d e
0 0 1 3 4
1 0 1 3 4
2 0 1 3 4
我不确定我是否在语法上遗漏了某些内容,或者这是否与描述的问题有关 here和here 。有人可以解释为什么这不起作用以及如何获得期望的结果吗?
我正在使用 python 2.7 和 pandas 0.24,如果有区别的话。
最佳答案
由于缺乏更好的选择,我目前正在这样做:
df2.columns = pd.MultiIndex.from_product([['bar'], df2.columns])
df1.drop(columns='bar', level=0, inplace=True)
df1 = df1.join(df2)
这给出了期望的结果。但如果列的顺序很重要,则需要谨慎,因为这种方法可能会改变它。
进一步阅读 Github 上提到的问题,我认为问题中的方法不起作用的原因确实与 pandas API 中尚未修复的不一致有关。
关于python - 将 pandas 多索引 DataFrame 的列替换为另一个 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59569943/