Pythonにおけるデータフレームの条件付きフラグ設定方法(前回の改良版1)

以下は、指定した列の値が指定した範囲内にあるかどうかを判定し、その結果に応じてフラグを立てるクラスの改良版です。

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')

コメント

タイトルとURLをコピーしました