【问题标题】:Apply Function Panda Single Column & Groupby应用函数 Pandas 单列和 Groupby
【发布时间】:2021-09-05 11:26:56
【问题描述】:

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

我的想法是,这应该可以通过编写一个函数并通过在“植物名称”上使用 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)

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

    • 太棒了 - 不知道为什么我没看到 - 谢谢。
    猜你喜欢
    • 2019-02-16
    • 1970-01-01
    • 2021-07-19
    • 2018-12-20
    • 2021-10-04
    • 2018-09-05
    • 1970-01-01
    • 2021-06-19
    • 2018-06-19
    相关资源
    最近更新 更多