为了账号安全,请及时绑定邮箱和手机立即绑定

使用应用于 groupby 的函数的结果来计算原始 df

使用应用于 groupby 的函数的结果来计算原始 df

叮当猫咪 2021-08-05 10:19:46
我有一些如下所示的数据df。我试图首先使用函数计算每个组的平均角度mean_angle。然后使用计算出的平均角度使用函数对每组进行另一次计算fun。import pandas as pdimport numpy as np生成样本数据a = np.array([1,2,3,4]).repeat(4)x1 = 90 + np.random.randint(-15, 15, size=a.size//2 - 2 )x2 = 270 + np.random.randint(-50, 50, size=a.size//2 + 2 )b = np.concatenate((x1, x2))np.random.shuffle(b) df = pd.DataFrame({'a':a, 'b':b})返回的数据框打印在下面。    a   b0   1   2951   1   782   1   2803   1   944   2   3085   2   2276   2   967   2   2998   3   2489   3   28810  3   8111  3   7812  4   10313  4   26514  4   30915  4   229我的功能是mean_angle和fundef mean_angle(deg):    deg = np.deg2rad(deg)    deg = deg[~np.isnan(deg)]    S = np.sum(np.sin(deg))    C = np.sum(np.cos(deg))    mu = np.arctan2(S,C)    mu = np.rad2deg(mu)    if mu <0:        mu = 360 + mu    return mudef fun(x, mu):    return  np.where(abs(mu - x) < 45, x, np.where(x+180<360, x+180, x-180))我试过的mu = df.groupby(['a'])['b'].apply(mean_angle)df2 = df.groupby(['a'])['b'].apply(fun, args = (mu,)) #this function should be element wise我知道这是完全错误的,但我想不出更好的方法。所需的输出是这样的,其中mu每组的 mean_angle a   b   c0   1   295 np.where(abs(mu - 295) < 45, 295, np.where(295 +180<360, 295 +180, 295 -180))1   1   78 np.where(abs(mu - 78) < 45, 78, np.where(78 +180<360, 78 +180, 78 -180))2   1   280 np.where(abs(mu - 280  < 45, 280, np.where(280  +180<360, 280  +180, 280  -180))3   1   94                ...4   2   308               ...5   2   227                .6   2   96                 .7   2   299                .8   3   248                .9   3   288                .10  3   81                 .11  3   78                 .12  4   103                .13  4   265                .14  4   309                .15  4   229                .任何帮助表示赞赏
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信