以下は、指定した列の値が指定した範囲内にあるかどうかを判定し、その結果に応じてフラグを立てるクラスの改良版です。
class DataChecker:
def __init__(self, df):
self.df = df.copy()
self.df.index.name = 'index'
self.df['flag'] = False
def check(self, column, lower, upper, target=None):
if column not in self.df.columns:
raise ValueError(f'Column {column} does not exist.')
# targetが指定されている場合はその値で判定
if target is not None:
mask = self.df[column] == target
else:
mask = (self.df[column] >= lower) & (self.df[column] < upper)
df_out = self.df.copy()
df_out['flag'] = False
df_out.loc[mask, 'flag'] = True
return df_out
このクラスは、以下のように使用できます。
import pandas as pd
# テスト用のデータフレームを作成
data = {
'A': [1, 5, 10, 15, 20],
'B': [7, 8, 9, 10, 11],
'C': [50, 60, 70, 80, 90],
'D': [100, 200, 300, 400, 500],
}
df = pd.DataFrame(data)
# インスタンスを作成し、列Bの値が8以上100未満の行にフラグを立てる
checker = DataChecker(df)
checker.check('B', 8, 100)
# フラグが立った結果をCSVファイルに保存
checker.save('output.csv')
コメント