当前位置: 代码迷 >> python >> 子集pandas DataFrames时避免循环
  详细解决方案

子集pandas DataFrames时避免循环

热度:40   发布时间:2023-06-16 14:12:16.0

我有一个看起来像这样的pandas DataFrame df_R

         Change       Date  SubsetCondId
0      0.000230 2015-02-13           868
1     -0.000080 2015-02-16           868
2      0.000380 2015-02-17           868
3     -0.000430 2015-02-13           679
4      0.000000 2015-02-16           679
5      0.000000 2015-02-17           679
6      0.004075 2015-02-13            10
7      0.000000 2015-02-16            10
8      0.001598 2015-02-17            10
9      0.015038 2015-02-13           937
10     0.000000 2015-02-16           937

为了创建一个新的DataFrame R ,将Date显示为索引,将SubsetCondId显示为列,我做了以下工作:

factorsId = np.sort(df_R['SubsetCondId'].unique())
dates = np.sort(df_R['Date'].unique())
R = pd.DataFrame(index=dates, columns=factorsId)
for fac_id in factorsId:
    dates_id = df_R['Date'][df_R['SubsetCondId']==fac_id]
    R_id = np.array(df_R['Change'][df_R['SubsetCondId']==fac_id])
    R.loc[dates_id,fac_id] = R_id

R = R.fillna(value=0)

随着数据集变大,过程变慢。 有没有其他方法可以解决此问题,也许是矢量化方法?

结合使用set_index和数据透视

df_R = df_R.set_index('Date').pivot(columns = 'SubsetCondId')

您可以使用pivot方法将给定列设置为索引,并将另一列中的值设置为

df_R.pivot(index='Date',columns='SubsetCondId',values='Change')
  相关解决方案