0

次のような DataFrame があります。

             A        B        C        D      
2000-01-03 -0.59885  0.18141 -0.68828  0.77572
2000-01-04  0.83935  0.15993  0.95911 -1.12959
2000-01-05  2.80215 -0.10858 -1.62114 -0.20170
2000-01-06  0.71670 -0.26707  1.36029  1.74254

最初の行の値に基づいて列をフィルター処理したいと思います。たとえば、最初の値が >0 の列のみを取得したいとします。そして、私が期待する結果は次のとおりです。

             B        D      
2000-01-03  0.18141  0.77572
2000-01-04  0.15993 -1.12959
2000-01-05 -0.10858 -0.20170
2000-01-06 -0.26707  1.74254

更新 ジェフの提案のおかげで、私はこのコードを書きました:

cols = []
firstRow = df.ix[0,:]
for i in range(len(firstRow)):
    if firstRow[i]>0:
    cols.append(i) 
return df.ix[:, list(cols)].values.copy()   

これを行うよりエレガントな方法はありますか?

4

1 に答える 1

1

これは明らかに以下で生成されたデータを使用していますが、例に簡単に適用できます。はiloc[-2]最後から 2 番目の行を選択し、ブール配列を作成します。loc次に、そのブール配列を取得して、該当する列を選択します。

In [2]: df = DataFrame(np.random.randn(4,4),columns=list('ABCD'),
             index=date_range('20000103',periods=4))

In [3]: df
Out[3]: 
                   A         B         C         D
2000-01-03 -0.132896 -0.151352  0.960943 -0.007701
2000-01-04 -1.653279 -1.101331 -2.083493 -1.920517
2000-01-05 -1.190868  0.983487  0.804209  0.962575
2000-01-06  0.232290  2.152097  0.414457  1.023253

In [6]: df.loc[:,df.iloc[-2]<0]
Out[6]: 
                   A
2000-01-03 -0.132896
2000-01-04 -1.653279
2000-01-05 -1.190868
2000-01-06  0.232290
于 2013-05-04T12:31:39.180 に答える