Hallo,
ich brauche bitte Hilfe bei der Selektion:
df_2020_high --> Hier sind sämtliche Länder und ihre Bevölkerungsstruktur aus dem Jahr 2020 drin.
In Locs befinden sich die IDs der Länder.
for i in locs:
# df_2020_high_modDF = df_2020_high.append({'Total' : df_2020_high[df_2020_high['LocID'] == i]['PopTotal'].sum()} , ignore_index=True)
Ich wollte über eine Schleife zu jeder ID eine neue Zeile mit der Summe der aktuellen ID eingfügen bzw.
wie kann ich mir die Summe von 'PopTotal' plus die 'Location' ausgeben lassen?
print( df_2020_high[['Location', df_2020_high['LocID'] == i ]['PopTotal'].sum() ] )
Letzendlich will ich ein Feld und die Summe aus einem Feld des Arrays auslesen lassen, aber leider funktoniert das nicht so einfach.
Kann mir jemand bitte ein ähnliches Beispiel nennen? Google und meine Aufzeichnungen konnten mir in diesem Fall auch nicht weiterhelfen.
Viele Grüße
Karambit
Hilfe bei der Selektion aus einem Data Frame
- __blackjack__
- User
- Beiträge: 13927
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Karambit: Ich werde aus der Beschreibung nicht wirklich schlau. Wenn ich raten müsste suchst Du so etwas wie Gruppieren nach ID und dann Aggregation per Gruppe.
Sind die Daten öffentlich verfügbar und kannst Du das mal mit Beispieldaten zeigen was Du hast und was Du als Ergebnis haben willst?
Sind die Daten öffentlich verfügbar und kannst Du das mal mit Beispieldaten zeigen was Du hast und was Du als Ergebnis haben willst?
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
-
- User
- Beiträge: 510
- Registriert: Mittwoch 13. November 2019, 08:38
@__blackjack__ Für mich klingt es so, als sollte das was du beschreibst nur mit den Ländern, welche in der schlecht benannten Liste `locs` stehen, passieren.
Ich versuche mal mein Glück:
*Glaskugel an*
*Glaskugel aus*
Ich versuche mal mein Glück:
*Glaskugel an*
Code: Alles auswählen
# nur die Länder finden, deren LocID in `locs` steht:
df[df["LocID"].isin(locs)]
# diese nach LocID gruppieren und aufsummieren:
df[df["LocID"].isin(locs)].groupby("LocID").sum()
- __blackjack__
- User
- Beiträge: 13927
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Wobei ich das Gruppieren und Summieren nach LocID etwas komisch finde, denn das würde ja bedeuten das a) die LocID in diesem Fall nicht eindeutig ist, und b) es Sinn macht über die Gesamtpopulation bei gleicher LocID und was immer die Datensätze mit gleicher LocID unterscheidet, zu summieren.
Ich habe mal mit den wenigen Informationen nach einem passenden Datensatz im Netz gesucht und eine Projektion der Bevölkerungsentwicklung gefunden wo auch 2020 enthalten ist, und da sehe ich nicht wie es sinnvoll sein kann PopTotal nach LocID zu summieren. Hier die Datenquelle: https://population.un.org/wpp/Download/Standard/CSV/
Ich habe mal mit den wenigen Informationen nach einem passenden Datensatz im Netz gesucht und eine Projektion der Bevölkerungsentwicklung gefunden wo auch 2020 enthalten ist, und da sehe ich nicht wie es sinnvoll sein kann PopTotal nach LocID zu summieren. Hier die Datenquelle: https://population.un.org/wpp/Download/Standard/CSV/
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
Hallo,
vielen Dank erstmal für eure Kommentare!
Es geht mir nicht darum, ob es Sinn macht oder nicht, sondern ich will verstehen, wie man das machen könnte.
(Kann man eigentlich hier auch Screenshots oder Bilder vom eigenen Laufwerk einfügen?)
LocID
Location
VarID
Variant
Time
MidPeriod
AgeGrp
AgeGrpStart
AgeGrpSpan
PopMale
PopFemale
PopTotal
LocID steht immer für ein Land und im Feld AgeGrp wird nach der Altersstruktur unterteilt, so gibt es immer ein PopTotal, dass sich nur auf diese Altersgruppe (Male + Female) bezieht.
Ich hätte gerne noch neben dem PopTotal ein Total, dass die Gesamtbevölkerung dieses Landes immer mit anzeigt.
Das wäre dann die Summe aller PopTotal-Felder zu einer LocID.
Ist das ungefähr verständlich?
Viele Grüße
Karambit
vielen Dank erstmal für eure Kommentare!
Es geht mir nicht darum, ob es Sinn macht oder nicht, sondern ich will verstehen, wie man das machen könnte.
(Kann man eigentlich hier auch Screenshots oder Bilder vom eigenen Laufwerk einfügen?)
LocID
Location
VarID
Variant
Time
MidPeriod
AgeGrp
AgeGrpStart
AgeGrpSpan
PopMale
PopFemale
PopTotal
LocID steht immer für ein Land und im Feld AgeGrp wird nach der Altersstruktur unterteilt, so gibt es immer ein PopTotal, dass sich nur auf diese Altersgruppe (Male + Female) bezieht.
Ich hätte gerne noch neben dem PopTotal ein Total, dass die Gesamtbevölkerung dieses Landes immer mit anzeigt.
Das wäre dann die Summe aller PopTotal-Felder zu einer LocID.
Ist das ungefähr verständlich?
Viele Grüße
Karambit
- __blackjack__
- User
- Beiträge: 13927
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Da hat einfachTobi ja bereits gezeigt wie das geht (df4 = WPP2019_PopulationByAgeSex_Medium.csv nach 2020 gefiltert):
Gegenprobe aus der "WPP2019_TotalPopulationBySex.csv" nach 2020 und Medium gefiltert:
Jup, stimmt überein.
Code: Alles auswählen
In [127]: df4.groupby("LocID")["PopTotal"].sum()
Out[127]:
LocID
4 38928.341
8 2877.800
12 43851.043
24 32866.268
28 97.928
...
2097 635156.773
2098 368869.644
2099 42677.809
5500 74338.926
5501 1940369.605
Name: PopTotal, Length: 443, dtype: float64
Code: Alles auswählen
In [136]: df2[df2["LocID"] == 4]["PopTotal"]
Out[136]:
70 38928.341
Name: PopTotal, dtype: float64
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
Vielen Dank!
Was ich eigentlich möchte ist folgendes:
LocID gibt es unterschiedlichen Ausprägungen, d.h., dass es Prob Land (LocID, Location) eine Unterteilung der Bevölkerungsstruktur gibt (AgeGrp) und somit das PopTotal sich immer auf die Summe von PopMale und PopFemale bezieht (PopTotal), aber ich will einfach noch danebene ein PopGesamt haben, dass immer die Summe von PopTotal aus dem LocID darstellt (das Land).
Kann man eigentlich Screenshots hier hochladen?
Was ich eigentlich möchte ist folgendes:
LocID gibt es unterschiedlichen Ausprägungen, d.h., dass es Prob Land (LocID, Location) eine Unterteilung der Bevölkerungsstruktur gibt (AgeGrp) und somit das PopTotal sich immer auf die Summe von PopMale und PopFemale bezieht (PopTotal), aber ich will einfach noch danebene ein PopGesamt haben, dass immer die Summe von PopTotal aus dem LocID darstellt (das Land).
Kann man eigentlich Screenshots hier hochladen?
- __blackjack__
- User
- Beiträge: 13927
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Karambit: Wie gesagt, das sollte eigentlich beantwortet sein. Der `df4` aus meinem letzten Beitrag enthält die Daten für 2020 und addiert alle "PopTotal" pro "LocID" auf.
Code: Alles auswählen
In [142]: df4.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 9303 entries, 1470 to 1403072
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 LocID 9303 non-null int64
1 Location 9303 non-null object
2 VarID 9303 non-null int64
3 Variant 9303 non-null object
4 Time 9303 non-null int64
5 MidPeriod 9303 non-null float64
6 AgeGrp 9303 non-null object
7 AgeGrpStart 9303 non-null int64
8 AgeGrpSpan 9303 non-null int64
9 PopMale 9303 non-null float64
10 PopFemale 9303 non-null float64
11 PopTotal 9303 non-null float64
dtypes: float64(4), int64(5), object(3)
memory usage: 944.8+ KB
In [143]: df4["Time"].unique()
Out[143]: array([2020])
In [144]: df4[df4["LocID"] == 4]
Out[144]:
LocID Location VarID ... PopMale PopFemale PopTotal
1470 4 Afghanistan 2 ... 2907.406 2765.103 5672.509
1471 4 Afghanistan 2 ... 2774.630 2641.593 5416.223
1472 4 Afghanistan 2 ... 2651.664 2540.450 5192.114
1473 4 Afghanistan 2 ... 2377.941 2251.504 4629.445
1474 4 Afghanistan 2 ... 2017.279 1909.206 3926.485
1475 4 Afghanistan 2 ... 1610.796 1498.590 3109.386
1476 4 Afghanistan 2 ... 1299.121 1179.138 2478.259
1477 4 Afghanistan 2 ... 1068.167 988.220 2056.387
1478 4 Afghanistan 2 ... 868.020 790.703 1658.723
1479 4 Afghanistan 2 ... 677.226 627.510 1304.736
1480 4 Afghanistan 2 ... 529.188 503.171 1032.359
1481 4 Afghanistan 2 ... 411.379 396.460 807.839
1482 4 Afghanistan 2 ... 305.081 307.557 612.638
1483 4 Afghanistan 2 ... 215.637 229.221 444.858
1484 4 Afghanistan 2 ... 140.254 172.197 312.451
1485 4 Afghanistan 2 ... 76.897 91.107 168.004
1486 4 Afghanistan 2 ... 33.115 42.490 75.605
1487 4 Afghanistan 2 ... 10.185 14.275 24.460
1488 4 Afghanistan 2 ... 2.053 3.139 5.192
1489 4 Afghanistan 2 ... 0.215 0.414 0.629
1490 4 Afghanistan 2 ... 0.011 0.028 0.039
[21 rows x 12 columns]
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
Hallo Black_Jack,
vielen Dank für deine Antwort. Das was du geschrieben hast, war mir klar, aber trotzdem noch einmal vielen Dank!
Ich möchte einfach nur in dem Array noch eine Reihe haben namens 'Total', die direkt neben PopTotal steht und die Gesamtbevölkerung des Landes anzeigt. Bei Afghanistan müssten dann immer 38928.341 stehen. Es gibt einfach keinen Eintrag in der Datei, die die Gesamtbevölkerung mit alleren Sturkturen abbildet.
Ich habe mir z.B. das hier angelegt:
f.head()
LocID
PopTotal
index
0
4
38928.341
1
8
2877.800
2
12
43851.043
3
24
32866.268
4
28
97.928
ich merke gerade, dass die Darstellung nicht hier hilfreich ist :-/
Gibt es hier eine Möglichkeit, aus dem Jupyter Notebook meinen Code vernünftig darzustellen?
Glaube, dass so schon mein Problem klarer wäre.
Viele Grüße
Karambit
vielen Dank für deine Antwort. Das was du geschrieben hast, war mir klar, aber trotzdem noch einmal vielen Dank!
Ich möchte einfach nur in dem Array noch eine Reihe haben namens 'Total', die direkt neben PopTotal steht und die Gesamtbevölkerung des Landes anzeigt. Bei Afghanistan müssten dann immer 38928.341 stehen. Es gibt einfach keinen Eintrag in der Datei, die die Gesamtbevölkerung mit alleren Sturkturen abbildet.
Ich habe mir z.B. das hier angelegt:
f.head()
LocID
PopTotal
index
0
4
38928.341
1
8
2877.800
2
12
43851.043
3
24
32866.268
4
28
97.928
ich merke gerade, dass die Darstellung nicht hier hilfreich ist :-/
Gibt es hier eine Möglichkeit, aus dem Jupyter Notebook meinen Code vernünftig darzustellen?
Glaube, dass so schon mein Problem klarer wäre.
Viele Grüße
Karambit