提问人:endive1783 提问时间:11/17/2023 最后编辑:endive1783 更新时间:11/18/2023 访问量:55
MultiIndex 和列表之间的产品
Product between MultiIndex and a list
问:
我有一个具有 2 个级别的 MultiIndex 对象:
import pandas as pd
mux = pd.MultiIndex.from_tuples([(1,1), (2,3)])
>>>
MultiIndex([(1, 1),
(2, 3)],
)
我想把它乘以一个列表,我试过了l=[4,5]
pd.MultiIndex.from_product([mux.values, [4,5]])
>>>
MultiIndex([((1, 1), 4),
((1, 1), 5),
((2, 3), 4),
((2, 3), 5)],
)
我设法得到了我预期的结果
from itertools import product
pd.MultiIndex.from_tuples([(*a, b) for a, b in product(mux, [4,5])])
>>>
MultiIndex([(1, 1, 4),
(1, 1, 5),
(2, 3, 4),
(2, 3, 5)],
)
有没有更好的方法来执行此操作?
答:
3赞
mozway
11/17/2023
#1
我认为你的方法很合理。
使用中间 DataFrame 格式交叉合并
的另一个选项:
pd.MultiIndex.from_frame(mux.to_frame().merge(pd.Series([4, 5], name=2), how='cross'))
输出:
MultiIndex([(1, 1, 4),
(1, 1, 5),
(2, 3, 4),
(2, 3, 5)],
names=[0, 1, 2])
1赞
Yogesh
11/17/2023
#2
您可以尝试以下操作:
import pandas as pd
mux = pd.MultiIndex.from_tuples([(1, 1), (2, 3)])
l = [4, 5]
# Create the MultiIndex by broadcasting the lists
result = pd.MultiIndex.from_arrays([mux.get_level_values(0), mux.get_level_values(1), l * len(mux)])
print(result)
`
评论
0赞
endive1783
11/17/2023
ValueError:所有数组的长度必须相同
1赞
sammywemmy
11/18/2023
#3
一种可能更有效的方法是在数组级别进行组合,在构建新的 MultiIndex 之前使用 和 进行组合。这样,您就可以处理数组,而不是仅为了返回索引而构建 DataFrame。与往常一样,使用您的实际数据进行测试:np.repeat
np.tile
len_mux = len(mux)
len_l = len(l)
mux = mux.repeat(len_l)
mux = [mux.get_level_values(n) for n in range(mux.nlevels)]
l = np.tile(l, len_mux)
mux.append(l)
pd.MultiIndex.from_arrays(mux)
MultiIndex([(1, 1, 4),
(1, 1, 5),
(2, 3, 4),
(2, 3, 5)],
)
评论