使用 Groupby 将分布拟合到 Python Pandas DF
Fit Distribution to Python Pandas DF with Groupby
我在数据框 'df 中有这样的每小时数据,它的大小很大 (3418896,9)。我需要将 weibull 分布拟合到数据,但我需要按 'plant_name'、'month' 和 'year'.
对输出(形状、位置、比例)进行分组
plant_name business_name business_code maint_region_name wind_speed_ms mos_time dataset month year
0 MAPLE RIDGE II UNITED STATES USA EAST 10.06 2021-09-22 13:00:00 ERA5 9 2021
1 MAPLE RIDGE II UNITED STATES USA EAST 10.04 2021-09-22 12:00:00 ERA5 9 2021
2 MAPLE RIDGE II UNITED STATES USA EAST 9.84 2021-09-22 11:00:00 ERA5 9 2021
3 MAPLE RIDGE II UNITED STATES USA EAST 10.67 2021-09-22 10:00:00 ERA5 9 2021
4 MAPLE RIDGE II UNITED STATES USA EAST 11.47 2021-09-22 09:00:00 ERA5 9 2021
我需要 'df' 每个 plant_name、月、年的形状、比例值。我在下面尝试过这个,但我只得到一个形状和比例的值,我需要一个单独的形状,每个 plant_name、月份和年份的比例。这是我的尝试,它只为形状提供一个数字,比例:
from scipy.stats import weibull_min
shape, loc, scale = weibull_min.fit(ncData.groupby(['plant_name','month','year']).apply(lambda x:x['wind_speed_ms']), floc=0)
shape
Out[21]: 2.2556719467040596
scale
Out[22]: 7.603953856897537
我不知道如何使用 groupby 'plant'name'、'month'、'year' 将输出发送到 'shape' 和 'scale' 参数。非常感谢您花时间帮助我做一些我可以尝试的事情。
这应该有效
import pandas as pd
from scipy.stats import weibull_min
# function applied to each ('plant_name','month','year') group
def fit_weibull(g):
# get wind speed data from the group
data = g['wind_speed_ms']
# fit weibull_min to the group wind data
params = weibull_min.fit(data)
# Return the fit parameters as a Series (each parameter will correspond to a different column)
return pd.Series(params, index=['shape', 'loc', 'scale'])
fit_params = ncData.groupby(['plant_name', 'month', 'year']).apply(fit_weibull)
我在数据框 'df 中有这样的每小时数据,它的大小很大 (3418896,9)。我需要将 weibull 分布拟合到数据,但我需要按 'plant_name'、'month' 和 'year'.
对输出(形状、位置、比例)进行分组 plant_name business_name business_code maint_region_name wind_speed_ms mos_time dataset month year
0 MAPLE RIDGE II UNITED STATES USA EAST 10.06 2021-09-22 13:00:00 ERA5 9 2021
1 MAPLE RIDGE II UNITED STATES USA EAST 10.04 2021-09-22 12:00:00 ERA5 9 2021
2 MAPLE RIDGE II UNITED STATES USA EAST 9.84 2021-09-22 11:00:00 ERA5 9 2021
3 MAPLE RIDGE II UNITED STATES USA EAST 10.67 2021-09-22 10:00:00 ERA5 9 2021
4 MAPLE RIDGE II UNITED STATES USA EAST 11.47 2021-09-22 09:00:00 ERA5 9 2021
我需要 'df' 每个 plant_name、月、年的形状、比例值。我在下面尝试过这个,但我只得到一个形状和比例的值,我需要一个单独的形状,每个 plant_name、月份和年份的比例。这是我的尝试,它只为形状提供一个数字,比例:
from scipy.stats import weibull_min
shape, loc, scale = weibull_min.fit(ncData.groupby(['plant_name','month','year']).apply(lambda x:x['wind_speed_ms']), floc=0)
shape
Out[21]: 2.2556719467040596
scale
Out[22]: 7.603953856897537
我不知道如何使用 groupby 'plant'name'、'month'、'year' 将输出发送到 'shape' 和 'scale' 参数。非常感谢您花时间帮助我做一些我可以尝试的事情。
这应该有效
import pandas as pd
from scipy.stats import weibull_min
# function applied to each ('plant_name','month','year') group
def fit_weibull(g):
# get wind speed data from the group
data = g['wind_speed_ms']
# fit weibull_min to the group wind data
params = weibull_min.fit(data)
# Return the fit parameters as a Series (each parameter will correspond to a different column)
return pd.Series(params, index=['shape', 'loc', 'scale'])
fit_params = ncData.groupby(['plant_name', 'month', 'year']).apply(fit_weibull)