【问题标题】:Is there a way to vectorize the following python (pandas) code for faster speed?有没有办法对以下 python (pandas) 代码进行矢量化以提高速度?
【发布时间】:2021-12-31 14:30:31
【问题描述】:

我有 2 个数据帧

A_df = pd.DataFrame(data = np.arange(2, 103, 10) + np.random.randn(11), 
                    columns = ['Time(s)'])

B_df = pd.DataFrame(data = zip(range(1, 102), np.random.randn(101)), 
                    columns = ['Time(s)', 'Value'])

A_df.head()

    Time(s)
0   2.751352
1   12.028663
2   20.638388
3   29.821199
4   42.516302

B_df.head()

    Time(s) Value
0   1   1.075801
1   2   0.890754
2   3   -0.015543
3   4   0.085298
4   5   0.208645

我想在时间 t(A_df)向A_df 添加一个新列Value of B at T(来自B_df)。

目前我正在使用apply() 方法执行此操作,如下所示:

A_df['Value of B at T'] = A_df.apply(lambda x: B_df.loc[B_df['Time(s)'] <= x['Time(s)'], 'Value'].values[-1], axis = 1)
A_df
    Time(s) Value of B at T
0   2.751352    -0.891782
1   12.028663   2.416335
2   20.638388   -0.186364
3   29.821199   -0.148716
4   42.516302   0.821272

我想知道是否有办法对apply() 方法执行的功能进行矢量化以加快代码速度?

【问题讨论】:

    标签: python pandas vectorization apply


    【解决方案1】:

    您可以尝试以下方法:

    A_df = A_df.assign(
        b_at_t=B_df
        .set_index('Time(s)')
        .reindex(A_df['Time(s)'], method='ffill')
        .values)
    

    【讨论】:

      猜你喜欢
      • 2016-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多