簡體   English   中英

熊貓拆棧以用Nans填充缺少的功能

[英]Pandas unstack stack to fill missing features with nans

該問題是該SO問題的后續部分: Pandas:將多列索引級別的列添加到multiindex

但是相比之下,我確實有以下數據框:

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欄也一樣。您知道我如何保持單元ii)僅在所有組之間廣播col_name_1嗎?

我目前的做法是放棄等級col_name_2之前stackunstack ,但是這需要一個額外的字典單位映射到這是不壞,但也許還有一個更優雅的解決方案的功能。

怎么樣:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM