如果我有一个数据框,例如像这样说 df
date number_range id
0 [2010-01-01, 2010-03-01] [5, 10] 1
1 [2010-02-01, 2010-06-01] [1, 3] 1
2 [2010-07-01, 2010-11-01] [12-50] 1
我想通过查找日期差异然后将 linspace 应用于所有行来将numpy.linspace应用于上述内容。例如,第 0 行的日期差异为 2,应用 linspace(5,10,2),第 1 行的差异为 4,应用 linspace(1,3,4)。
final result
-------------
date number_range id linspace
0 [2010-01-01, 2010-03-01] [5, 10] 1 [5, 10]
1 [2010-02-01, 2010-06-01] [1, 3] 1 [1, 1.66667, 2.3333, 3]
2 [2010-07-01, 2010-12-01] [12-50] 1 [12, 21.5, 31, 40.5, 50]
我试过做df.apply(lambda row: np.linspace(row['start_value'], row['end value'], row['diff'])
,但我一直收到一个类型错误,说“系列”对象不能被解释为整数......我试过用同样的错误做一个 diff.astype(int)......不知道去哪里从那里。
你可以像下面这样apply()
使用:axis=1
(if diff = [2,4,5])
df['linspace'] = df.apply(lambda x: np.round(
np.linspace(x['number_range'][0], x['number_range'][1], x['diff']),3),
axis=1)
print(df)
或者首先,您可以创建start_value
并end_value
作为您的问题,然后创建linspace
如下:
df[['start_value','end_value']] = pd.DataFrame(df['number_range'].to_list())
df['linspace'] = df.apply(lambda x: np.round(
np.linspace(x['start_value'], x['end_value'], x['diff']),3), axis=1)
print(df)
输出:
date number_range diff linspace
0 [2010-01-01, 2010-03-01] [5, 10] 2 [5.0, 10.0]
1 [2010-02-01, 2010-06-01] [1, 3] 4 [1.0, 1.667, 2.333, 3.0]
2 [2010-07-01, 2010-11-01] [12, 50] 5 [12.0, 21.5, 31.0, 40.5, 50.0]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句