python - Pandas unstack stack 用 nans 填充缺失的功能
问题描述
这个问题是这个 SO 问题的后续: Pandas: add columns to multiindex for any depht of index levels
但相比之下,我确实有以下数据框:
index = [['A', 'B', 'C', 'D'], ['a', 'b', 'a', 'b']]
cols = [['AC', 'AC', 'BC', 'DC', 'CC'], ['ac', 'aac', 'bc', 'ac', 'bc'], ['AAc', 'AAAAc', 'BBc', 'AAc', 'BBc']]
data = np.random.random((4, 5))
df = pd.DataFrame(data=data, index=index, columns=cols)
df.columns.names = ['col_name_0', 'col_name_1', 'col_name_2']
如果我应用上一篇文章中的解决方案,我会得到很多列,因为级别“col_name_2”也会广播到级别 0 的所有组。
引用问题的解决方案是:
out = df.stack(level = 1).unstack().swaplevel(1, 2, axis = 1)
但这会产生:
col_name_0 AC BC CC DC
col_name_1 aac ac bc aac ac bc aac ac bc aac ac bc
col_name_2 AAAAc AAc AAAAc AAc AAAAc AAc BBc BBc BBc BBc BBc BBc AAc AAc AAc
A a 0.908180 NaN NaN 0.383903 NaN NaN NaN NaN 0.993260 NaN NaN 0.112402 NaN 0.196868 NaN
B b 0.901394 NaN NaN 0.096745 NaN NaN NaN NaN 0.260379 NaN NaN 0.723057 NaN 0.194833 NaN
关卡 col_name_2 是属于关卡中相应特征的物理单位col_name_1
。因此,第 1 列(0 索引)没有任何意义。第 3 列也一样。你知道我怎么能 i) 保留单位 ii) 只col_name_1
在所有组中广播吗?
我目前的方法是降低col_name_2
之前的级别stack
,unstack
但这需要一个额外的字典来将单元映射到还不错的功能,但也许有一个更优雅的解决方案。
解决方案
怎么样:
df.stack(level=(1,2)).unstack(level=(-1,-2))
输出:
col_name_0 AC BC ... CC DC
col_name_2 AAAAc AAc BBc AAAAc AAc ... AAc BBc AAAAc AAc BBc
col_name_1 aac ac bc aac ac ... ac bc aac ac bc
A a 0.724763 0.688566 NaN NaN NaN ... NaN 0.854830 NaN 0.653829 NaN
B b 0.990737 0.689543 NaN NaN NaN ... NaN 0.486084 NaN 0.027718 NaN
C a 0.822234 0.122896 NaN NaN NaN ... NaN 0.580121 NaN 0.043333 NaN
D b 0.269341 0.503598 NaN NaN NaN ... NaN 0.447615 NaN 0.384507 NaN