问题描述
我有一个看起来像这样的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)
随着数据集变大,过程变慢。 有没有其他方法可以解决此问题,也许是矢量化方法?
1楼
结合使用set_index和数据透视
df_R = df_R.set_index('Date').pivot(columns = 'SubsetCondId')
2楼
您可以使用pivot
方法将给定列设置为索引,并将另一列中的值设置为
df_R.pivot(index='Date',columns='SubsetCondId',values='Change')