gpt4 book ai didi

python - 重新索引缺少类别的多级索引

转载 作者:行者123 更新时间:2023-12-02 01:56:15 26 4
gpt4 key购买 nike

我有一个包含两个索引的数据框:groupclass。我有一本字典,其中包含需要添加到这两个索引中的其他级别。具体来说,我想将 E 添加到 group 索引中。我想确保所有 g1、g2 和 g3 都存在于每个索引中(因此将 g3 添加到 A 组,将 g1 添加到 B 组,g2 和g3 到 C 组,g1 和 g3 到 D 组,g1、g2 和 g3 到 E 组。我想在适当的地方用零填充总列

原始数据框在这里

df = pd.DataFrame(data={'group' : ['A','A','B','B','C','D'],
'class': ['g1','g2','g2','g3','g1','g2'],
'total' : [3,14,12,11,21,9]})

包含所有必需类别的字典(和映射的 df)在这里

dic = {'group':['A','B','C','D','E'],
'class' : ['g1','g2','g3']}

预期的输出在这里

expectedOutput = pd.DataFrame(data={'group' : ['A','A','A','B','B','B','C','C','C','D','D','D','E','E','E'],
'class': ['g1','g2', 'g3','g1','g2', 'g3','g1','g2', 'g3','g1','g2', 'g3','g1','g2', 'g3'],
'total' : [3,14,0, 0,12,11,21,0,0,0,9,0, 0,0,0]})

我在重新索引时维护重复值时遇到了麻烦,但我需要保留它们。欢迎任何建议,非常感谢

最佳答案

使用 MultiIndex 的解决方案 - 由 MultiIndex.from_productdict 创建与 DataFrame.reindex :

dic = {'group':['A','B','C','D','E'],
'class' : ['g1','g2','g3']}

mux = pd.MultiIndex.from_product(dic.values(), names=dic)

df = df.set_index(list(dic)).reindex(mux, fill_value=0).reset_index()
print (df)
group class total
0 A g1 3
1 A g2 14
2 A g3 0
3 B g1 0
4 B g2 12
5 B g3 11
6 C g1 21
7 C g2 0
8 C g3 0
9 D g1 0
10 D g2 9
11 D g3 0
12 E g1 0
13 E g2 0
14 E g3 0

或者通过 itertools.product 创建的 DataFrame 进行左连接:

from  itertools import product

dicDf = pd.DataFrame(product(*dic.values()), columns=dic)

df = dicDf.merge(df, how='left').fillna({'total':0})
print (df)
group class total
0 A g1 3.0
1 A g2 14.0
2 A g3 0.0
3 B g1 0.0
4 B g2 12.0
5 B g3 11.0
6 C g1 21.0
7 C g2 0.0
8 C g3 0.0
9 D g1 0.0
10 D g2 9.0
11 D g3 0.0
12 E g1 0.0
13 E g2 0.0
14 E g3 0.0

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

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