2017-07-27 45 views
-1

我有以下數據框:蟒蛇轉換多個名單排了一定的表

network date  count2 count3 user2  user3 
3   20170721 [6, 7] [1,3] [57,88] [47,58] 
4   20170721 [6]  []  [12]  [] 
43  20170721 []  [7,2] []  [57,62] 

,我想分割每行的名單,但數和用戶必須符合:

network date  count2 count3 user2 user3 
3   20170727 6  Nan  57  Nan 
3   20170727 7  Nan  88  Nan 
3   20170727 Nan  1  Nan  47 
3   20170727 Nan  3  Nan  58 
4   20170727 6  Nan  12  Nan 
43  20170727 Nan  7  Nan  57 
43  20170727 Nan  2  Nan  62 

如何我能以快速的方式做到嗎?用戶列表實際上很長(超過50k條目)。 謝謝!

+1

你嘗試過這麼遠嗎?當你使用.asarray將數據框轉換爲數組時,你能告訴我結果是什麼嗎? –

+1

告訴我們你做了什麼,即使是很慢 – minhhn2910

+0

你是什麼意思「計數和用戶必須符合」?您不會列出除Nan'外的相應計數和用戶值的任何示例。 您的預期成果是什麼? 「每行分割列表」究竟意味着什麼?每行數據會發生什麼? –

回答

1

一種方法可以做到這一點,並實現你正在尋找的結果沒有所有額外的NaN。

df = pd.DataFrame({'network':[3,4,43],'date':['20170721']*3, 
        'count2':[[6,7],[6],[]], 
        'count3':[[1,3],[],[7,2]], 
        'user2':[[57,88],[12],[]], 
        'user3':[[47,58],[],[57,62]]}) 

df = df.set_index(['network','date']) 

(df.apply(lambda x: pd.DataFrame(x.tolist(),index=x.index) 
         .stack() 
         .rename(x.name)) 
    .reset_index()) 

輸出:

network  date level_2 level_0 count2 count3 user2 user3 
0  3 20170721  0  0.0  6.0  1.0 57.0 47.0 
1  3 20170721  1  NaN  7.0  3.0 88.0 58.0 
2  4 20170721  0  1.0  6.0  NaN 12.0 NaN 
3  43 20170721  0  2.0  NaN  7.0 NaN 57.0 
4  43 20170721  1  NaN  NaN  2.0 NaN 62.0