結論
DataFrame
のapply
関数とラムダを組み合わせます。
前提
サンプルコードでは、下記の記事で公開しているcsvを使用させていただきました。csvからデータを取り込み、DataFrame
を作成しております。
サンプルコード
.py
import pandas as pd
# 抽出条件として使用する関数
def condition(row):
if row['name'] == 'Bob': return True
if row['state'] == 'NY': return True
if (row['state'] == 'CA') and (row['point'] == 70) : return True
return False
def main():
# ...
# dfにはすでにDataFrame型のデータが入っているものとします。
print('全データ')
print(df)
print()
print('抽出後')
# apply関数とラムダを組み合わせて、関数に条件を委ねる
# 「df.apply」と記述して1行の情報が全てほしい場合、axis=1が必要
print(df[df.apply(condition, axis=1)])
if __name__ == '__main__':
main()
結果
全データ
name age state point
0 Alice 24 NY 64
1 Bob 42 CA 92
2 Charlie 18 CA 70
3 Dave 68 TX 70
4 Ellen 24 CA 88
5 Frank 30 NY 57
抽出後
name age state point
0 Alice 24 NY 64
1 Bob 42 CA 92
2 Charlie 18 CA 70
5 Frank 30 NY 57
関数の条件が適応されていることが分かります。
補足
サンプルコードにあったコード
.py
# apply関数とラムダを組み合わせて、関数に条件を委ねる
# 「df.apply」と記述して1行の情報が全てほしい場合、axis=1が必要
print(df[df.apply(condition, axis=1)])
これは、下記のコードを簡略したものです。
.py
# apply関数とラムダを組み合わせて、関数に条件を委ねる
# 「df.apply」と記述して1行の情報が全てほしい場合、axis=1が必要
print(df[df.apply(lambda row: condition(row), axis=1)])
@shiracamus さんに教えていただきました。ありがとうございます!
以上です。
参考