应用函数 Panda Single Column & Groupby

时间:2021-06-21 19:47:37

标签: pandas function group-by pandas-groupby apply

我正在尝试编写然后应用一个函数,该函数将使用数据帧第二列上的“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)

1 个答案:

答案 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
相关问题