0

Pandas でデータフレームをフィルタリングするための構文を実装するにはどうすればよいですか? ( df[df.column1 > someValue])

データフレームをフィルタリングするときに Pandas と同じ構文を持つクラスを作成しようとしています。

このようなデータフレームの構文を複製するにはどうすればよいですdf = DataFrame(someData) か:

df[df.column1 > someValue]

メソッド__getattr____getitem__構文を実装しました

df.column1 
df['column1']

しかし、両方をリンクする方法がわかりません。また、Pandas コードからコピーする関数が見つかりませんでした。

この問題の実装または Pandas の関数への参照のいずれかが非常に役立ちます。

編集:(解決策)

答えのヒントに従って、__getitem__次のように関数を実装しました。

from tier tools import compress

def __getitem__(self, name):
    """Get items with [ and ]
    """
    #If there is no expression, return a column
    if isinstance(name, str):
      return self.data[name]

    #if there was an expression return the dataframe filtered
    elif isinstance(name, list):
      ind = list(compress(range(len(name)), name))
      temp = DataFrame([[self.data[c].values[i] 
                            for i in ind] 
                           for c in self.columns],
                           columns=self.columns)
      return temp

列クラス (シリーズ) の比較メソッドも実装する必要があることに注意してください。完全なコードはここで見ることができます。

4

2 に答える 2

1

基本的に、再配列または構造化された配列をラップするだけのものが必要だと思います。

import numpy as np

myarray = np.array([("Hello",2.5,3),
                        ("World",3.6,2),
                        ('Foobar',2,7)]).T

df = np.core.records.fromarrays(myarray, 
                             names='column1, column2, column3',
                             formats = 'S8, f8, i8')

print(df)
print(df[df.column3<=3])

私自身は Pandas を使用していませんが、DataFrame は再配列に非常に似ているようです。独自のロールを作成したい場合は、必ずndarray のサブクラス化について読んでください。numpy 配列は、次のようなブール マスク変数でインデックス付けすることもできます。

myarray = np.array([(1,2.5,3.),
                        (2,3.6,2.),
                        (3,2,7.)])
print(myarray[myarray[:,2]<=3.])
于 2016-11-19T18:41:28.623 に答える