我有一些如下所示的数据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 .任何帮助表示赞赏
添加回答
举报
0/150
提交
取消