考虑一下pd.Series
s
和{mux
lol = [list('aabc'), list('xyyz'), [1, 2, 3, 3]]
mux = pd.MultiIndex.from_arrays(lol, names='l1 l2 l3'.split())
s = pd.Series(range(1001, 1005), mux)
s
l1 l2 l3
a x 1 1001
y 2 1002
b y 3 1003
c z 3 1004
dtype: int64
fill_value : replace NaN with this value if the unstack produces missing values
当我unstack
我确实得到NaN
s。
所以我试着fill_value=0
s.unstack(fill_value=0)
l3 1 2 3
l1 l2
a x 1001 0 0
y 0 1002 0
b y 0 0 1003
c z 0 0 1004
果然,NaN
中填充了0
。在
但是,如果我想一次unstack
多出一个级别。在
s.unstack(['l2', 'l3'], fill_value=0)
l2 x y z
l3 1 2 3 3
l1
a 1001.0 1002.0 NaN NaN
b NaN NaN 1003.0 NaN
c NaN NaN NaN 1004.0
我的fill_value
被忽略。在
为什么?什么是变通办法?
试试这个:
@MaxU的解决方案
很有道理。只需
fillna(0)
并更改dtype
糟糕的工作环境
太浪费了!在
unstack
只捕获列fill_value=0
执行多个单个unstack,并使用上一步中的列重新编制索引。在^{pr2}$
更好地解决
只有在这种特殊情况下才有效。在
用
fill_value=0
解开我不关心的一个电平,然后转置所有解决方案都会产生
相关问题 更多 >
编程相关推荐