完全なクエリAPIを取得するまで、Pandasでこれの構文を短縮するための少なくともいくつかのアプローチがあります道路(perhap私はgithubプロジェクトに参加しようとします。これは時間の許可です。構文を少し短くする
一つの方法は以下の通りです:完全にこの問題を解決するには
inds = df.apply(lambda x: x["A"]>10 and x["B"]<5, axis=1)
print df[inds].to_string()
、一つは選択して句パンダへのSQLのようなものを構築する必要があります。これはまったく些細なことではありませんが、私はこのために働くかもしれない1つのスタブは、Python operator
組み込みモジュールを使用することです。これにより、シンボルの代わりに関数よりも大きいものを扱うことができます。ですから、次の操作を行うことができます:
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
とDeMorganの法則を使用してください。
出典
2012-11-16 15:12:56
ely
メーリングリストに今後の質問を投稿してください。しかし今のところ、プログラムでこれをやりたければどうでしょうか?あなたは列ラベルのリストを持っていました...どうすればそれを '|'表記法?例えば。 – user248237dfsf
明示するには:あなたが行ったテーブルに他の値があった場合、 'any(1)'アプローチはうまくいきません。 'labels = ['A'、 'B'、 'C'、... 'フィルターにかけたい。多くの列があり、 'any'をそれらのサブセットに適用したいだけです(あなたはサブセットのラベルを知っています)。 – user248237dfsf