2017-10-16 37 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]