Python 显示索引的所有组合,然后求和
我有一个4索引数据框,我想知道如何确保显示所有索引组合 我这样做是为了总结:Python 显示索引的所有组合,然后求和,python,pandas,multi-index,Python,Pandas,Multi Index,我有一个4索引数据框,我想知道如何确保显示所有索引组合 我这样做是为了总结: df.sum(level=[0,1,2,3]).unstack(fill_value=0).stack() 但它只显示第四个索引的所有可能值,而第三个索引中的每一个都显示第四个索引的所有可能值。我希望这也适用于第一个和第二个索引(用0填充空行) 谢谢你可以试试 s=df.sum(level=[0,1,2,3]) idx=pd.MultiIndex.from_product([s.index.get_level_val
df.sum(level=[0,1,2,3]).unstack(fill_value=0).stack()
但它只显示第四个索引的所有可能值,而第三个索引中的每一个都显示第四个索引的所有可能值。我希望这也适用于第一个和第二个索引(用0填充空行)
谢谢你可以试试
s=df.sum(level=[0,1,2,3])
idx=pd.MultiIndex.from_product([s.index.get_level_values(0).unique(),s.index.get_level_values(1).unique(),s.index.get_level_values(2).unique(),s.index.get_level_values(3).unique()])
s.reindex(idx)
您可以在执行
groupby
之前转换为类别,然后使用fillna
根据设计,通过分类列的多索引进行分组可以得到它们的笛卡尔乘积
下面是一个小例子
import pandas as pd, numpy as np
df = pd.DataFrame({'A': np.random.randint(0, 2, 5),
'B': np.random.randint(0, 2, 5),
'C': np.random.randint(0, 2, 5),
'D': np.random.randint(0, 2, 5),
'E': np.random.rand(5)})
for col in ['A', 'B', 'C', 'D']:
df[col] = df[col].astype('category')
res = df.groupby(['A', 'B', 'C', 'D']).sum().fillna(0)
结果
E
A B C D
0 0 0 0 0.982165
1 0.000000
1 0 0.000000
1 0.000000
1 0 0 0.000000
1 0.366428
1 0 0.000000
1 0.000000
1 0 0 0 0.000000
1 0.606826
1 0 0.000000
1 0.164896
1 0 0 0.000000
1 0.000000
1 0 0.027386
1 0.000000
请提供您正在处理的df示例和预期输出。