2017-10-16 57 views
0

一個新的列表,我有以下數據框讓我們把它DF1過濾指數條件爲使用熊貓

   GOOG AAPL  XOM  IBM  Cash zero 
2011-01-10  0.0  0.0  0.0  0.0  -19.900  4 
2011-01-11  0.0  0.0  0.0  0.0  0.000  5 
2011-01-12  0.0  0.0  0.0  0.0  0.000  5 
2011-01-13  0.0 -1500.0  0.0 4000.0 -67392.400  2 

它的最後一列表示多少列包含零值。 我想要創建一個新的數據框,其中包含colum爲零的日期爲一個小於5;這意味着在第零列中搜索每行4。

這段代碼有實現這一目的的意圖;

total_columns =trades['zero'].max()-1 
trades_impact = trades.index.where(trades['zero'] == total_columns) 

這就是我所得到的;

DatetimeIndex(['NaT', 'NaT', 'NaT', 'NaT', 'NaT', 'NaT', 'NaT', 'NaT', 'NaT', 
      'NaT', 
      ... 
      'NaT', 'NaT', 'NaT', 'NaT', 'NaT', 'NaT', 'NaT', 'NaT', 'NaT', 
      'NaT'], 
      dtype='datetime64[ns]', length=245, freq=None) 

,我期望的輸出是:

>>>trades_impact 
2011-01-10  
2011-01-11  
2011-01-12  
2011-01-13 

trades_impact將是一個新的數據幀。

任何幫助將超過歡迎。

+0

'df.index [df.zero == 4] .tolist()' –

+0

是印刷本:[時間戳( '2011-01-10 00:00:00')] –

+0

我本來期望就日期而言,與df1中的輸出相同。 –

回答

0

您可以在df.index使用布爾檢索,然後轉換爲字符串。

df.index[df.zero == 4].astype(str).tolist() 
1

根據您的描述,我不認爲您需要.where()方法,因爲它返回的形狀與self(它應用的對象)形狀相同。如果條件爲False,則新對象的值從自身(如果條件爲True)或other對象(第二個參數)中選擇。您不指定其他對象,因此它默認爲NaN

您得到的結果是一系列長度與index相同的值,其值爲NaT,其中trades['zero'] == total_columnsFalse

相反,我認爲,如果你直接使用索引功能,你會得到你想要的結果:

trades_impact = trades.index[trades['zero'] == total_columns]