2016-04-25 6 views
1

を考えると、以下の表order_size削除:私はこのようなレイアウトで終わる、積み重ねられたビューにこれを変換する必要がありスタックデータと0/NaNを

Symbol  BAX BTP CT D DX ESTX50 GBM GBP GBS GE I LE NZD S ZL 
Date                    
2016-03-03 0 0 -2 0 0  0 0 0 0 0 0 0 0 0 0 
2016-03-04 -12 0 0 0 0  0 0 0 0 1 0 0 -1 0 0 
2016-03-07 0 0 0 0 -1  0 1 -1 4 -1 1 0 1 1 0 
2016-03-08 0 0 0 0 0  0 0 0 0 0 0 0 -1 0 0 
2016-03-10 0 0 0 0 0  0 0 1 -1 0 0 0 0 0 0 
2016-03-11 0 0 0 0 0  0 -1 -1 -1 0 -1 0 1 -1 0 
2016-03-14 0 0 0 0 0  0 0 0 0 0 0 0 -1 1 0 
2016-03-15 -1 0 0 0 0  0 0 0 0 1 0 0 1 0 0 
2016-03-17 0 0 0 0 0  0 0 0 0 -1 0 0 0 0 -1 

を: Date | Symbol | Value、値が0ない場合すべてのエントリが削除されることを意味します。 df.stack()を使用すると、pd.TimeSeriesに変換されます。これは私が望むものではありません(3番目の列がないため)。それは一見不可能な0を削除するorder_size.loc[:, (order_size.Value != 0).any(axis=0)]を実行できるようになり

Date  Symbol 
2016-03-03 BAX  0 
      BTP  0 
      CT  -2 
      D   0 
      DX   0 
      ESTX50  0 
      GBM  0 
      GBP  0 

Values以降はそのpd.Seriesの列ではありません)。

編集

order_size.replace('0', np.NaN)df.stack()を実行する前に、ほとんどのトリックを行いますが、私はその3列目Valueを必要としそうであるようにpd.Seriesはまだ、望ましいことではありません。私はあなたが最初にすべての値を置き換えることができると思い

答えて

1

NaN0を等しくし、その後reset_indexstackを使用します。

print df != 0 
       BAX BTP  CT  D  DX ESTX50 GBM GBP GBS \ 
Date                   
2016-03-03 False False True False False False False False False 
2016-03-04 True False False False False False False False False 
2016-03-07 False False False False True False True True True 
2016-03-08 False False False False False False False False False 
2016-03-10 False False False False False False False True True 
2016-03-11 False False False False False False True True True 
2016-03-14 False False False False False False False False False 
2016-03-15 True False False False False False False False False 
2016-03-17 False False False False False False False False False 

       GE  I  LE NZD  S  ZL 
Date             
2016-03-03 False False False False False False 
2016-03-04 True False False True False False 
2016-03-07 True True False True True False 
2016-03-08 False False False True False False 
2016-03-10 False False False False False False 
2016-03-11 False True False True True False 
2016-03-14 False False False True True False 
2016-03-15 True False False True False False 
2016-03-17 True False False False False True 
print df[df != 0] 
      BAX BTP CT D DX ESTX50 GBM GBP GBS GE I LE NZD \ 
Date                    
2016-03-03 NaN NaN -2.0 NaN NaN  NaN NaN NaN NaN NaN NaN NaN NaN 
2016-03-04 -12.0 NaN NaN NaN NaN  NaN NaN NaN NaN 1.0 NaN NaN -1.0 
2016-03-07 NaN NaN NaN NaN -1.0  NaN 1.0 -1.0 4.0 -1.0 1.0 NaN 1.0 
2016-03-08 NaN NaN NaN NaN NaN  NaN NaN NaN NaN NaN NaN NaN -1.0 
2016-03-10 NaN NaN NaN NaN NaN  NaN NaN 1.0 -1.0 NaN NaN NaN NaN 
2016-03-11 NaN NaN NaN NaN NaN  NaN -1.0 -1.0 -1.0 NaN -1.0 NaN 1.0 
2016-03-14 NaN NaN NaN NaN NaN  NaN NaN NaN NaN NaN NaN NaN -1.0 
2016-03-15 -1.0 NaN NaN NaN NaN  NaN NaN NaN NaN 1.0 NaN NaN 1.0 
2016-03-17 NaN NaN NaN NaN NaN  NaN NaN NaN NaN -1.0 NaN NaN NaN 

       S ZL 
Date     
2016-03-03 NaN NaN 
2016-03-04 NaN NaN 
2016-03-07 1.0 NaN 
2016-03-08 NaN NaN 
2016-03-10 NaN NaN 
2016-03-11 -1.0 NaN 
2016-03-14 1.0 NaN 
2016-03-15 NaN NaN 
2016-03-17 NaN -1.0 
df1 = df[df != 0].stack().reset_index() 
#set custom column names 
df1.columns = ['Date','Symbol','Value'] 
print df1 
      Date Symbol Value 
0 2016-03-03  CT -2.0 
1 2016-03-04 BAX -12.0 
2 2016-03-04  GE 1.0 
3 2016-03-04 NZD -1.0 
4 2016-03-07  DX -1.0 
5 2016-03-07 GBM 1.0 
6 2016-03-07 GBP -1.0 
7 2016-03-07 GBS 4.0 
8 2016-03-07  GE -1.0 
9 2016-03-07  I 1.0 
10 2016-03-07 NZD 1.0 
11 2016-03-07  S 1.0 
12 2016-03-08 NZD -1.0 
13 2016-03-10 GBP 1.0 
14 2016-03-10 GBS -1.0 
15 2016-03-11 GBM -1.0 
16 2016-03-11 GBP -1.0 
17 2016-03-11 GBS -1.0 
18 2016-03-11  I -1.0 
19 2016-03-11 NZD 1.0 
20 2016-03-11  S -1.0 
21 2016-03-14 NZD -1.0 
22 2016-03-14  S 1.0 
23 2016-03-15 BAX -1.0 
24 2016-03-15  GE 1.0 
25 2016-03-15 NZD 1.0 
26 2016-03-17  GE -1.0 
27 2016-03-17  ZL -1.0 

replacereset_indexのもう一つの解決策:

df = df.replace({0:np.nan}) 
df1 = df[df != 0].stack().reset_index() 
#set custom column names 
df1.columns = ['Date','Symbol','Value'] 
print df1 
      Date Symbol Value 
0 2016-03-03  CT -2.0 
1 2016-03-04 BAX -12.0 
2 2016-03-04  GE 1.0 
3 2016-03-04 NZD -1.0 
4 2016-03-07  DX -1.0 
5 2016-03-07 GBM 1.0 
6 2016-03-07 GBP -1.0 
7 2016-03-07 GBS 4.0 
8 2016-03-07  GE -1.0 
9 2016-03-07  I 1.0 
10 2016-03-07 NZD 1.0 
11 2016-03-07  S 1.0 
12 2016-03-08 NZD -1.0 
13 2016-03-10 GBP 1.0 
14 2016-03-10 GBS -1.0 
15 2016-03-11 GBM -1.0 
16 2016-03-11 GBP -1.0 
17 2016-03-11 GBS -1.0 
18 2016-03-11  I -1.0 
19 2016-03-11 NZD 1.0 
20 2016-03-11  S -1.0 
21 2016-03-14 NZD -1.0 
22 2016-03-14  S 1.0 
23 2016-03-15 BAX -1.0 
24 2016-03-15  GE 1.0 
25 2016-03-15 NZD 1.0 
26 2016-03-17  GE -1.0 
27 2016-03-17  ZL -1.0 
+0

解決策を確認してください。「0」を「NaN」に、またはすべての値を「0」から「NaN」に置き換える必要がありますか? – jezrael

+0

'0'を' NaN'に置き換える必要があります! – nlsdfnbch

関連する問題