一つを割り当てますオプションはquery
を使用することです。あなたの質問には、'A==5 & B==4 & C==2'
の行に沿って文字列を作成する必要があります。
問題をセットアップするために、('A', '==', 5)
のように、条件として(column, comparison, value)
の形式でタプルのリストを提供すると仮定します。あなたは等価比較のみを気にする場合は、'=='
でちょうどハードコードはできる
def extract_matching_rows(df, conditions):
conditions = ' & '.join(['{}{}{}'.format(*c) for c in conditions])
return df.query(conditions)
とあなたの状態のタプルからそれを排除:
次に、あなたの線に沿って機能を記述することができます。わずかに異なる条件で
使用例:
conditions = [('A', '>=', 5), ('B', '==', 4), ('C', '<', 3)]
extract_matching_rows(df1, conditions)
A B C
0 5 4 2
注意あなたもquery
で列を比較することができます
conditions = [('B', '>=', 'C'), ('A', '==', 5)]
extract_matching_rows(df1, conditions)
A B C
0 5 4 2
1 5 2 2
3 5 1 1
ありがとう@root、あなたの解決策は数字の代わりに働いていますか、文字列の比較がありますか? – user308827
はい、非常に簡単な方法ではありません。クエリ文字列内に引用符を付ける必要があります。 '' A == "yes"&B == 4 "です。これを実現するには、文字列内に引用符が必要です。つまり、文字列を定義する一重引用符で囲まれた二重引用符、つまりその逆も必要です。 '( 'A'、 '=='、 'yes' ')'。 – root
また、関数内でチェックを実装して、文字列と比較しているかどうかを判断し、そうであればクエリのフォーマットを少し違うようにすることもできます: ''{} {}' {} '' format(* c)' 。 – root