import pandas as pd
class DataGovernance:
start_time = None
end_time = None
# 把共同的属性放在这里 只要调用一次就行了
@classmethod
def set_time_range(cls, start_time, end_time):
cls.start_time = start_time
cls.end_time = end_time
def threshold_gover(self, df, col_name, min_, max_):
print('Calling parent class threshold governance method')
df = df[df['time'] <= self.end_time]
filtered_df = df[(df[col_name] >= min_) & (df[col_name] <= max_)]
return filtered_df
class PowerGovernance(DataGovernance):
def __init__(self, use_cols):
super().__init__()
self.use_cols = use_cols
def prepare_data(self, df):
df = df[(df['time'] >= self.start_time) & (df['time'] <= self.end_time)]
df = df[self.use_cols]
return df
def power_gover(self, df, pv_min, pv_max):
df = self.prepare_data(df)
df = self.threshold_gover(df, self.use_cols[1], pv_min, pv_max)
return df
class WeatherGovernance(DataGovernance):
def __init__(self, use_cols, data_type):
super().__init__()
self.use_cols = use_cols
self.data_type = data_type
def prepare_data(self, df):
df = df[(df['time'] >= self.start_time)]
df = df[self.use_cols] # Use check_cols to filter columns
return df
def weather_gover(self, df, ghi_min, ghi_max):
df = self.prepare_data(df)
df = self.threshold_gover(df, self.use_cols[1], ghi_min,
ghi_max) # Assuming ghi is the first column in check_cols
return df
if __name__ == '__main__':
start_time, end_time = '2024-01-01 12:00:00', '2024-01-01 23:00:00'
# 共同值的属性放这里 只要设置一次 子类实例化后可以通过self.属性名访问
DataGovernance.set_time_range(start_time, end_time)
# Assuming df_power and df_weather are defined somewhere
df_power = pd.DataFrame({'time': pd.date_range(start=start_time, periods=24, freq='H'),
'pv': range(24)}) # Example dataframe, replace with your actual data
df_weather = pd.DataFrame({'time': pd.date_range(start=start_time, periods=24, freq='H'),
'ghi': range(24)}) # Example dataframe, replace with your actual data
# Example usage of PowerGovernance 子类不同的属性各自实例化的时候传入
p_gover = PowerGovernance(['time', 'pv'])
df_power_filtered = p_gover.power_gover(df_power, pv_min=3, pv_max=24)
print(p_gover.use_cols)
# Example usage of WeatherGovernance
w_gover = WeatherGovernance(['time', 'ghi'], 'weather')
df_weather_filtered = w_gover.weather_gover(df_weather, ghi_min=10, ghi_max=20)
print(w_gover.use_cols)
基类子类属性的使用案例 多个子类有部分相同的属性可参考
最新推荐文章于 2024-10-18 00:00:00 发布