J'avais DF avec le nom de l'attraction, la date et le montant du trajet.
rides var 0 circuit 16200.0 1 roller coaster 32768.0 2 car 28272.0 3 train 2048.0
Je peux calculer cela manuellement, mais mon dataframe contient plus de 1000 lignes et plus de 30 parcours différents.
Dans l'exemple, cela ressemble à ceci
print(attr.loc[attr['rides'] == 'circuit']['ride_sum'].var(), attr.loc[attr['rides'] == 'roller coaster']['ride_sum'].var(), attr.loc[attr['rides'] == 'car']['ride_sum'].var(), attr.loc[attr['rides'] == 'train']['ride_sum'].var()) 16200.0 32768.0 28272.0 2048.0
Je souhaite obtenir une trame de données avec une variation pour chaque trajet qui ressemble à ceci
import pandas as pd attr = pd.DataFrame( {'rides':['circuit','circuit', 'roller coaster', 'roller coaster', 'car', 'car', 'car', 'train', 'train'], 'date':['2019-06-22', '2019-06-23', '2019-06-29', '2019-07-06', '2019-09-01', '2019-09-07', '2019-09-08', '2019-09-14', '2019-09-15'], 'ride_sum':[663, 483, 858, 602, 326, 2, 86, 70, 134]}) rides date ride_sum 0 circuit 2019-06-22 663 1 circuit 2019-06-23 483 2 roller coaster 2019-06-29 858 3 roller coaster 2019-07-06 602 4 car 2019-09-01 326 5 car 2019-09-07 2 6 car 2019-09-08 86 7 train 2019-09-14 70 8 train 2019-09-15 134
3 Réponses :
Essayez groupby
avec var()
comme ceci:
attr.groupby("rides").var().reset_index() rides ride_sum 0 car 28272 1 circuit 16200 2 roller coaster 32768 3 train 2048
( reset_index()
n'est pas forcément nécessaire)
Merci! Comment puis-je faire cela pour kurtosis? si j'essaye de le remplacer, j'obtiens l'objet 'DataFrameGroupBy' sans attribut 'kurtosis'
Pour kurtosis voir la réponse éditée de @Serge de Gosson de Varennes. En plus de cela, vous pouvez utiliser scipy.stats.kurtosis
dans la méthode apply
.
Faites ceci:
attr.groupby(attr.rides).apply(pd.DataFrame.kurt).reset_index()
ÉDITER:
Pour le kurtosis, il n'y a pas d'agrégat. Vous devez faire ceci:
attr.groupby(attr.rides).agg(["var"]).reset_index()
Avec votre exemple, il y a moins de trois valeurs par groupe, donc il retournera NaN
.
Merci! Comment puis-je faire cela pour kurtosis? si j'essaye de le remplacer, j'obtiens «l'objet SeriesGroupBy» n'a pas d'attribut «kurtosis»
Utilisez la fonction unique dans les pandas pour faire des manèges uniques et appliquez une boucle pour prendre var Exemple:
unique_rides = unique(attr['rides']) for ride in unque_rides: print(attr.loc[attr['rides'] == ride]['ride_sum'].var())
Merci
Merci! Comment puis-je obtenir les résultats dans le dict?