gpt4 book ai didi

python - 将单索引 DataFrame 复制到 MultiIndex DataFrame

转载 作者:太空宇宙 更新时间:2023-11-04 06:13:16 25 4
gpt4 key购买 nike

编辑:在这里找到我的答案:Building a hierarchically indexed DataFrame from existing DataFrames

原来我需要创建一个匹配的 MultiIndex 并修复了更高的级别

原文:

我承认,我还不了解合并和连接,但我不确定它们是否是我想要的。

我有一个具有单个索引的 DataFrame 和一个具有 MultiIndex 的 DataFrame,其最后一级与单索引 DataFrame 相同。

我正在尝试复制/嫁接以下内容:

In [1]: import pandas as pd

In [2]: import numpy as np

In [3]: import itertools

In [4]:

In [4]: inner = ('a','b')

In [5]: outer = ((10,20), (1,2))

In [6]: cols = ('one','two','three','four')

In [7]:

In [7]: sngl = pd.DataFrame(np.random.randn(2,4), index=inner, columns=cols)

In [8]:

In [8]: index_tups = list(itertools.product(*(outer + (inner,))))

In [9]: index_mult = pd.MultiIndex.from_tuples(index_tups)

In [10]: mult = pd.DataFrame(index=index_mult, columns=cols)

In [11]:

In [11]: sngl
Out[11]:
one two three four
a 2.946876 -0.751171 2.306766 0.323146
b 0.192558 0.928031 1.230475 -0.256739

In [12]: mult
Out[12]:
one two three four
10 1 a NaN NaN NaN NaN
b NaN NaN NaN NaN
2 a NaN NaN NaN NaN
b NaN NaN NaN NaN
20 1 a NaN NaN NaN NaN
b NaN NaN NaN NaN
2 a NaN NaN NaN NaN
b NaN NaN NaN NaN

In [13]:

In [13]: mult.ix[(10,1)] = sngl

In [14]:

In [14]: mult
Out[14]:
one two three four
10 1 a NaN NaN NaN NaN
b NaN NaN NaN NaN
2 a NaN NaN NaN NaN
b NaN NaN NaN NaN
20 1 a NaN NaN NaN NaN
b NaN NaN NaN NaN
2 a NaN NaN NaN NaN
b NaN NaN NaN NaN

In [15]:

我做错了什么?

编辑:当我按索引进行索引时它会起作用,但这肯定不是 pandas 的方式:

In [15]: mult.ix[(10,1,'a')] = sngl.ix['a']

In [16]: mult
Out[16]:
one two three four
10 1 a 2.946876 -0.7511706 2.306766 0.3231457
b NaN NaN NaN NaN
2 a NaN NaN NaN NaN
b NaN NaN NaN NaN
20 1 a NaN NaN NaN NaN
b NaN NaN NaN NaN
2 a NaN NaN NaN NaN
b NaN NaN NaN NaN

最佳答案

.ix.loc 在这个例子中是等价的(只是更明确)

In [48]: nm = mult.reset_index().set_index('level_2')

In [49]: nm
Out[49]:
level_0 level_1 one two three four
level_2
a 10 1 NaN NaN NaN NaN
b 10 1 NaN NaN NaN NaN
a 10 2 NaN NaN NaN NaN
b 10 2 NaN NaN NaN NaN
a 20 1 NaN NaN NaN NaN
b 20 1 NaN NaN NaN NaN
a 20 2 NaN NaN NaN NaN
b 20 2 NaN NaN NaN NaN

这可能适用于 rhs 上的系列;这可能是一个 buglet

In [50]: nm.loc['a',sngl.columns] = sngl.loc['a'].values

In [51]: nm
Out[51]:
level_0 level_1 one two three four
level_2
a 10 1 0.3738456 -0.2261926 -1.205177 0.08448757
b 10 1 NaN NaN NaN NaN
a 10 2 0.3738456 -0.2261926 -1.205177 0.08448757
b 10 2 NaN NaN NaN NaN
a 20 1 0.3738456 -0.2261926 -1.205177 0.08448757
b 20 1 NaN NaN NaN NaN
a 20 2 0.3738456 -0.2261926 -1.205177 0.08448757
b 20 2 NaN NaN NaN NaN

In [52]: nm.reset_index().set_index(['level_0','level_1','level_2'])
Out[52]:
one two three four
level_0 level_1 level_2
10 1 a 0.3738456 -0.2261926 -1.205177 0.08448757
b NaN NaN NaN NaN
2 a 0.3738456 -0.2261926 -1.205177 0.08448757
b NaN NaN NaN NaN
20 1 a 0.3738456 -0.2261926 -1.205177 0.08448757
b NaN NaN NaN NaN
2 a 0.3738456 -0.2261926 -1.205177 0.08448757
b NaN NaN NaN NaN

关于python - 将单索引 DataFrame 复制到 MultiIndex DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17451843/

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