J'ai un Dataframe avec des signaux et des retours différents. Je veux faire ce qui suit:
Mon Dataframe ressemble à ceci: Entrez la description de l'image ici P>
Mon code ressemble à ceci:
df = portbase.groupby(['signalname','year'])['return'].apply(lambda x: (np.prod(1+x/100)-1) * 100).reset_index().T
3 Réponses :
Essayez ce code:
df = portbase.groupby(['signalname','year'])['return'].apply(lambda x: (np.prod(1+x/100)-1) * 100).unstack().T
Votre solution fonctionne bien! La seule chose est que mes signaux sont maintenant confidens dans des rangées et non des colonnes. Donc, la 1ère colonne sont mes signaux, puis au 2e sont les années (1990-2019) et dans la 3ème des rendements annuels. Savez-vous comment transposer la première colonne afin que j'ai mes signaux comme des en-têtes?
J'ai édité ma question ci-dessus. Malheureusement, le .t ne transpose pas ma colonne de signal.
Malheureusement, cela ne fonctionne toujours pas. J'ai mis à jour l'image dans ma question ci-dessus.
Fonctionne parfaitement! Merci!
c'est possible avec pivot_table pour cela.
signal_cols = ['signalname1', 'signalname2']##.. agg_func = lambda x: np.prod(1+x/100)-1) result = my_df.pivot_table(index='year', columns=signal_cols, values='return', aggfunc=agg_func)
première chose est qu'il semble que vous n'utilisez pas vos calculs pour les sauver. J et moi sommes les signaux et les années. P>
du haut de ma tête La fonction .LOC () est destinée à accéder à / lire des rangées et des colonnes par leur nom. Vous essayez donc essentiellement d'accéder aux données d'années et de signaux de rendements. P>
Vous devrez peut-être apporter vos résultats dans J'espère que ma réponse a aidé quelque peu. P>