gpt4 book ai didi

python - 添加新的多索引级别

转载 作者:太空宇宙 更新时间:2023-11-03 23:59:22 25 4
gpt4 key购买 nike

我有一个数据框:

d = pd.DataFrame({'i1': ['A', 'B', 'C', 'D', 'E'],
'i2': ['I', 'II', 'III', 'IV', 'V'],
'val': ["lol1", "lol2", "lol3", "lol4", "lol5"]}).set_index(["i1", "i2"])
val
i1 i2
A I lol1
B II lol2
C III lol3
D IV lol4
E V lol5

我需要从值 [5, 10, 15] 添加新的索引级别 i3使用 pandas API,所以它看起来像:

            val
i1 i2 i3
A I 5 lol1
10 lol1
15 lol1
B II 5 lol2
10 lol2
15 lol2
C III 5 lol3
10 lol3
15 lol3
D IV 5 lol4
10 lol4
15 lol4
E V 5 lol5
10 lol5
15 lol5

我的尝试(丑陋):

d = np.repeat(d.reset_index().values, 3, 0)

i3 = [5, 10, 15]
r2 = np.tile(i3, 5)

r = np.concatenate([d, r2.reshape(-1, 1)], 1)

d = pd.DataFrame(r, columns=["i1", "i2", "val", "i3"])
d = d.set_index(["i1", "i2", "i3"])

此外,我一直在寻找 pd.MultiIndex.from_product,但无论如何它都会从 i1i2 进行组合我做什么。

最佳答案

根据 MultiIndex 的值创建元组列表,然后使用 DataFrame.reindexMultiIndex.from_tuples :

vals = [5, 10, 15]
tups = [x + (i,) for x in d.index for i in vals]
d = d.reindex(pd.MultiIndex.from_tuples(tups, names=['i1','i2','i3']))
print (d)
val
i1 i2 i3
A I 5 lol1
10 lol1
15 lol1
B II 5 lol2
10 lol2
15 lol2
C III 5 lol3
10 lol3
15 lol3
D IV 5 lol4
10 lol4
15 lol4
E V 5 lol5
10 lol5
15 lol5

关于python - 添加新的多索引级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56236898/

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