我有4个索引Dataframe,我想知道如何确保显示所有索引组合。
我正在运行此总结:
df.sum(level=[0,1,2,3]).unstack(fill_value=0).stack()
但它只显示第三个索引的第四个索引的所有可能值。我希望这也适用于第一个和第二个索引(用0填充空行)。
谢谢
答案 0 :(得分: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)
答案 1 :(得分:0)
您可以在执行groupby
之前转换为类别,然后使用fillna
。
按照设计,按分类列的MultiIndex分组会产生笛卡尔积。
以下是一个小例子。
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