我有一个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 ,将日期显示为索引,将 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)
随着数据集变大,进程变慢。有没有不同的方法来处理这个问题,也许是一种矢量化方法?
答案 0 :(得分:0)
使用set_index与pivot
结合使用df_R = df_R.set_index('Date').pivot(columns = 'SubsetCondId')
答案 1 :(得分:-1)
您可以使用pivot
方法将给定列设置为索引,将另一列中的值设置为shown here
df_R.pivot(index='Date',columns='SubsetCondId',values='Change')