使用Pandas按条件将索引过滤到新列表中

时间:2017-10-16 01:50:32

标签: python pandas datetime

我有以下数据框,我们称之为 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 zero为 1 小于5的日期;意思是搜索列0中每列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将是一个新的数据框。

任何帮助都将受到欢迎。

2 个答案:

答案 0 :(得分:1)

根据您的描述,我不认为您需要.where()方法,因为它返回的形状与self(应用它的对象)形状相同。如果条件为 for(int i=0;i<s.length();i++){ if(condition){list.add(s.charAt(i)} else{ list.remove(String.valueOf(s.charAt(i))); } } ,则从self(如果条件为True)或other对象(第二个参数)中选择新对象的值。您没有指定其他对象,因此默认为False

您获得的结果是与NaN长度相同的系列,indexNaT的每个位置的值为trades['zero'] == total_columns

相反,如果您直接使用索引功能,我认为您将获得所需的结果:

False

答案 1 :(得分:0)

您可以在df.index上使用布尔索引,然后转换为字符串。

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