我正在尝试编写然后应用一个函数,该函数将使用数据帧第二列上的“groupby”将回归系数乘以数据帧单列中的数据值。我的数据在 df 中是这样的:
plant_name year month wind_speed_ms
0 ARIZONA I 1991 1 6.99
1 ARIZONA I 1991 2 7.00
2 ARIZONA I 1991 3 6.41
3 ARIZONA I 1991 4 6.18
4 CAETITE II 1991 1 6.69
5 CAETITE II 1991 2 6.21
coeff 是下面的熊猫:
plant_name slopex intercept
0 ARIZONA I 1.033109 -0.353939
1 CAETITE II 0.967414 0.194396
结果应该是这样的:
plant_name year month adjusted_wind_speed
0 ARIZONA I 1991 1 6.867
1 ARIZONA I 1991 2 6.878
2 ARIZONA I 1991 3 6.268
3 ARIZONA I 1991 4 6.031
4 CAETITE II 1991 1 6.666
5 CAETITE II 1991 2 6.202
我的想法是,这应该可以通过编写一个函数并通过在“plant_name”上使用 groupby 来应用它来解决,但我遇到了这个“关键错误”
KeyError: 'slopex'
我正在尝试的代码:
def ADJUST(slopex, intercept):
adj_df = coeff.slopex * df["wind_speed_ms"] + coeff.intercept
return adj_df
c_adj = (df.groupby(['plant_name','year','month'])[['wind_speed_ms']].apply(lambda x:
ADJUST(x['slopex'],x['intercept']))).to_frame(name='c_adj').reset_index().round(2)
答案 0 :(得分:1)
我通过以下方式使用了这些数据。 (我假设您在系数表中指的是 CAETITE II 而不是 CAETITE I)。
df = pd.DataFrame(
data=[
["ARIZONA I", 1991, 1, 6.99],
["ARIZONA I", 1991, 2, 7.00],
["ARIZONA I", 1991, 3, 6.41],
["ARIZONA I", 1991, 4, 6.18],
["CAETITE II",1991, 1, 6.69],
["CAETITE II",1991, 2, 6.21]
],
columns=['plant_name', 'year', 'month', 'wind_speed_ms'])
coeff_df = pd.DataFrame(
data=[
['ARIZONA I', 1.033109, -0.353939],
['CAETITE II', 0.967414, 0.194396],
],
columns=['plant_name', 'slopex', 'intercept']
)
你只需要简单的合并:
df = df.merge(coeff_df, on='plant_name')
df['adjusted_wind_speed'] = df.wind_speed_ms * df.slopex + df.intercept
df
plant_name year month wind_speed_ms slopex intercept adjusted_wind_speed
0 ARIZONA I 1991 1 6.99 1.033109 -0.353939 6.867493
1 ARIZONA I 1991 2 7.00 1.033109 -0.353939 6.877824
2 ARIZONA I 1991 3 6.41 1.033109 -0.353939 6.268290
3 ARIZONA I 1991 4 6.18 1.033109 -0.353939 6.030675
4 CAETITE II 1991 1 6.69 0.967414 0.194396 6.666396
5 CAETITE II 1991 2 6.21 0.967414 0.194396 6.202037