我在行索引器中有一个带有Dataframe
的Pandas MultiIndex
,如下所示:
此数据框是groupby
操作的结果,然后从3级MultiIndex
切片。我希望' date'要保留行索引器,但要移动' SlabType'行索引器的级别为列索引器,其中不可用的值为NaN
。
这就是我想要达到的目的:
我需要执行哪些操作才能实现此目的?此外,如果问题的标题可以改进,请提出建议。
答案 0 :(得分:1)
将unstack
与选择列SlabLT
一起使用:
print (df['SlabLT'].unstack())
但是如果可能的话MultiIndex
中的重复是必要的聚合列,例如。 mean
:
print (df.groupby(level=[0,1])['SlabLT'].mean().unstack())
<强>示例强>:
df = pd.DataFrame({'date':['2017-10-01','2017-10-08','2017-10-08','2017-10-15', '2017-10-15'],
'SlabType':['UOM2','AMOUNT','UOM2','AMOUNT','AMOUNT'],
'SlabLT':[1,6000,1,6000,5000]}).set_index(['date','SlabType'])
print (df)
SlabLT
date SlabType
2017-10-01 UOM2 1
2017-10-08 AMOUNT 6000
UOM2 1
2017-10-15 AMOUNT 6000 <-duplicated MultiIndex '2017-10-15', 'AMOUNT'
AMOUNT 5000 <-duplicated MultiIndex '2017-10-15', 'AMOUNT'
print (df['SlabLT'].unstack())
ValueError:索引包含重复的条目,无法重塑
print (df.groupby(level=[0,1])['SlabLT'].mean())
date SlabType
2017-10-01 UOM2 1
2017-10-08 AMOUNT 6000
UOM2 1
2017-10-15 AMOUNT 5500
Name: SlabLT, dtype: int64
print (df.groupby(level=[0,1])['SlabLT'].mean().unstack())
SlabType AMOUNT UOM2
date
2017-10-01 NaN 1.0
2017-10-08 6000.0 1.0
2017-10-15 5500.0 NaN
答案 1 :(得分:1)
由于某些条目的值为NaN
,因此您可能需要考虑pivot table以避免重复条目&#34;取消堆栈其中一个索引时的ValueError。
假设您有df
DataFrame,其列'SlabLT'
的索引为date
和SlabType
,请尝试:
df.reset_index().pivot_table(values = 'SlabLT', index = 'date', columns = 'SlabLT')