完全なクエリAPIを取得するまで、Pandasでこれの構文を短縮するための少なくともいくつかのアプローチがあります(おそらく、私はgithubプロジェクトに参加しようとしますが、これは時間の許す限りであり、他に誰もいない場合は開始)。
構文を少し短くする1つの方法を以下に示します。
inds = df.apply(lambda x: x["A"]>10 and x["B"]<5, axis=1)
print df[inds].to_string()
これを完全に解決するには、SQLselectやwhere句などをPandasに組み込む必要があります。これは決して些細なことではありませんが、これでうまくいくと思う1つの方法は、Pythonoperator
組み込みモジュールを使用することです。これにより、greater-thanをシンボルではなく関数として扱うことができます。したがって、次のことができます。
def pandas_select(dataframe, select_dict):
inds = dataframe.apply(lambda x: reduce(lambda v1,v2: v1 and v2,
[elem[0](x[key], elem[1])
for key,elem in select_dict.iteritems()]), axis=1)
return dataframe[inds]
次に、あなたのようなテスト例は次のようになります。
import operator
select_dict = {
"A":(operator.gt,10),
"B":(operator.lt,5)
}
print pandas_select(df, select_dict).to_string()
pandas_select
さまざまな一般的な論理演算子を自動的に処理するための引数を増やすか、名前空間に短い名前でインポートすることで、構文をさらに短縮できます。
pandas_select
上記の関数は、論理積と制約のチェーンでのみ機能することに注意してください。異なる論理動作を得るには、それを変更する必要があります。またはnot
、ド・モルガンの法則を使用します。