2017-02-16 3 views
0

ich Pandas Dataframe df_R haben, die wie folgt aussieht:for-Schleifen zu vermeiden, wenn Pandas Datenrahmen subsetting

  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 

Um einen neuen Datenrahmen R, das zeigt die Datum als Indizes zu erstellen und die SubsetCondId als Spalten habe ich die folgenden:

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) 

als der Satz von dat a wird größer, der Prozess wird langsamer. Gibt es einen anderen Weg, um mit diesem Problem umzugehen, vielleicht einen vektorisierten Ansatz?

+0

df.set_index einzustellen (‚Datum‘) würde Datum als Index anzeigen – Vaishali

Antwort

-1

Sie die pivot Methode verwenden, um eine bestimmte Spalte als Index und die Werte aus einer anderen Spalte als shown here

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

Zum downvoter: Ich denke, der Code würde richtig funktionieren und wurde auch als Antwort akzeptiert. Könnten Sie bitte erläutern, warum der Downvote? –

0

Verwendung set_index mit Schwenk kombiniert

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