2017-02-16 2 views
0

У меня есть панд DataFrame df_R который выглядит следующим образом:Избежания для петель при Подменит панд DataFrames

  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) 

в наборе Дат a становится больше, процесс замедляется. Есть ли другой способ справиться с этой проблемой, возможно, с помощью векторизованного подхода?

+0

df.set_index («Дата») будет отображать Date как индекс – Vaishali

ответ

-1

Вы можете использовать метод pivot для установки заданного столбца в качестве индекса и значений из другого столбца в shown here

df_R.pivot(index='Date',columns='SubsetCondId',values='Change') 
+0

To downvoter: Я думаю, что код будет работать правильно и также будет принят в качестве ответа. Не могли бы вы объяснить, почему нисходящий? –

0

Использование set_index в сочетании с шарниром

df_R = df_R.set_index('Date').pivot(columns = 'SubsetCondId') 
Смежные вопросы