À l'heure actuelle, je travaille avec l'ensemble de données Covid faire quelques idées.
L'ensemble de données est de cette forme:
Country Province Lat Lon Date Cases Status
0 Thailand 15.0000 101.0000 2020-01-22 00:00:00+00:00 2 confirmed
1 Thailand 15.0000 101.0000 2020-01-23 00:00:00+00:00 3 confirmed
2 Thailand 15.0000 101.0000 2020-01-24 00:00:00+00:00 5 confirmed
3 Thailand 15.0000 101.0000 2020-01-25 00:00:00+00:00 7 confirmed
4 Thailand 15.0000 101.0000 2020-01-26 00:00:00+00:00 8 confirmed
Je veux groupe par pays, en sommant sur la colonne « Cas » (nous appellerons cette colonne somme de cas), mais je rencontre un problème avec la latitude et la longitude: Je veux prendre le lat / long du maximum de l'affaire colonne. En d'autres termes, je voudrais la latitude et la longitude de la ligne avec le plus grand nombre de cas. Pour clarifier, le cas d'utilisation est qu'un pays comme la France a des lignes avec de multiples latitude et longitudes (comme Polynésie française par exemple), mais je veux juste prendre le lat / long dans le groupement de la région qui a la plupart des cas.
Je utilise actuellement une agrégation comme suit:
nonzero_cases[(nonzero_cases['Date'] == "03/13/2020")].groupby("Country").agg({"Lat":"first","Lon":"first","Cases":"sum"})
Cela donne:
Country Lat Lon Cases
Afghanistan 33.0000 65.0000 7
Albania 41.1533 20.1683 33
Algeria 28.0339 1.6596 26
Andorra 42.5063 1.5218 1
...
Mais ce n'est pas tout à fait ce que je veux, car il ne tient pas compte du nombre de cas, et prend juste la première Lat / Lon.
Ajouter DataFrame.sort_values
par colonne Cases
, maintenant premières valeurs sont des lignes avec un maximum de Cases
par groupes:
print (df)
Country Lat Lon Date Cases Status
0 Thailand 15.0 101.0 2020-01-22 00:00:00+00:00 2 confirmed
1 Thailand 15.0 101.0 2020-01-23 00:00:00+00:00 3 confirmed
2 Thailand 15.0 101.0 2020-01-24 00:00:00+00:00 5 confirmed
3 Thailand 15.0 101.0 2020-01-25 00:00:00+00:00 7 confirmed
4 Thailand 14.0 103.0 2020-01-26 00:00:00+00:00 8 confirmed <- changed data
df1 = (df.sort_values('Cases', ascending=False)
.groupby("Country")
.agg({"Lat":"first","Lon":"first","Cases":"sum"}))
print (df1)
Lat Lon Cases
Country
Thailand 14.0 103.0 25