<jupyter_start><jupyter_text>Aufgaben zum Kapitel "DataFrame"  Aufgaben:1. Aufgabe: Erzeugen Sie ein DataFrame, das wie folgt aussieht:```Vienna   country           Austria         area                414.6         population        1805681Hamburg  country           Germany         area                  755         population        1760433Berlin   country           Germany         area               891.85         population        3562166Zürich   country       Switzerland         area                87.88         population         378884dtype: object```<jupyter_code># prog4book
import pandas as pd

cities = ["Vienna", "Vienna", "Vienna",
          "Hamburg", "Hamburg", "Hamburg",
          "Berlin", "Berlin", "Berlin",
          "Zürich", "Zürich", "Zürich"]

data = ["Austria", 414.60,    1805681,
        "Germany", 755.00,    1760433,
        "Germany", 891.85,    3562166,
        "Switzerland", 87.88, 378884]

index = [cities, ["country", "area", "population",
                  "country", "area", "population",
                  "country", "area", "population",
                  "country", "area", "population"]]

city_series = pd.Series(data, index=index)
print(city_series)<jupyter_output>Vienna   country           Austria
         area                414.6
         population        1805681
Hamburg  country           Germany
         area                  755
         population        1760433
Berlin   country           Germany
         area               891.85
         population        3562166
Zürich   country       Switzerland
         area                87.88
         population         378884
dtype: object<jupyter_text>2. Aufgabe: Vertauschen Sie die Indices der vorigen Series.<jupyter_code># prog4book
city_series = city_series.sort_index()

city_series = city_series.swaplevel()
city_series.sort_index(inplace=True)
print(city_series)<jupyter_output>area        Berlin          891.85
            Hamburg            755
            Vienna           414.6
            Zürich           87.88
country     Berlin         Germany
            Hamburg        Germany
            Vienna         Austria
            Zürich     Switzerland
population  Berlin         3562166
            Hamburg        1760433
            Vienna         1805681
            Zürich          378884
dtype: object<jupyter_text>3. Aufgabe: Erzeugen Sie ein beliebiges DataFrame mit einem Index, der aus Vornamen besteht, sowie und einer Spalte für das Gewicht und einer Spalte für die Körpergröße. Extrahieren Sie dann alle Zeilen, deren BMI\footnote{BMI} im normalen Bereich liegt, d.h. zwischen 18.5 und 25.Es gilt:$$BMI = \frac {g}{h**2} $$<jupyter_code># prog4book
import pandas as pd
persons = { "Name" : ["Henry", "Sarah", "Elke", 
                      "Lulu", "Vera", "Toni", 
                      "Maria", "Chris"],
            "Größe" : [179, 165, 172, 154, 150, 
                       189, 176, 175],
            "Gewicht" : [65, 58, 58, 45, 43, 99, 68, 60]
          }

pdf = pd.DataFrame(persons, 
                   columns = ["Gewicht", "Größe"],
                   index=persons["Name"])

bmi = (pdf.Gewicht / ((pdf.Größe/100) ** 2))
bmi_okay = pdf.loc[(20 < bmi) & (bmi < 25)]
print(bmi_okay)<jupyter_output>Gewicht  Größe
Henry       65    179
Sarah       58    165
Maria       68    176<jupyter_text>4. Aufgabe: Geben Sie die Zeilen aus, in deren Namen ein kleines "i" vorkommt.<jupyter_code># prog4book
pdf.loc[pdf.index.str.contains("i")]<jupyter_output><empty_output><jupyter_text>5. Aufgabe: Fügen Sie an den in Aufgabe 3 erzeugten DataFrame eine Zeile mit dem BMI an.<jupyter_code># prog4book
pdf.insert(loc=len(pdf.columns),
           column="BMI",
           value=(pdf.Gewicht / ((pdf.Größe/100) ** 2)))
pdf<jupyter_output><empty_output><jupyter_text>6. Aufgabe: Geben Sie das in der letzten Aufgabe erzeugte DataFrame absteigend sortiert nach dem BMI aus.<jupyter_code># prog4book
pdf.sort_values(by="BMI", ascending=False)<jupyter_output><empty_output><jupyter_text>7. Aufgabe: Geben Sie nun alle Zeilen aus, deren BMI-Werte innerhalb von 18.5 und 23 liegen und deren Vornamen ein "a" enthalten.<jupyter_code># prog4book
bmi_okay = (18.5 < pdf['BMI']) & (pdf['BMI'] < 23.5)
name_contains_a = pdf.index.str.contains('a')
print(pdf.loc[bmi_okay & name_contains_a])<jupyter_output>Gewicht  Größe        BMI
Sarah       58    165  21.303949
Vera        43    150  19.111111
Maria       68    176  21.952479<jupyter_text>8. Aufgabe: Erzeugen Sie ein DataFrame mit einem Index, der aus den Monatsnamen besteht, und die Spaltennamen Vornamen entsprechen. Füllen Sie nun die Spalten mit zufälligen ganzen Zahlen zwischen 120 und 200.<jupyter_code># prog4book

import numpy as np
import pandas as pd

names = ['Jonas', 'Leon', 'Finn', 'Guido', 
         'Lara', "Hannah", "Mila", "Lina"]
index = ["Januar", "Februar", "März",
         "April", "Mai", "Juni",
         "Juli", "August", "September",
         "Oktober", "November", "Dezember"]
df = pd.DataFrame(np.random.randint(120, 
                                    200, 
                                    size=(len(index), 
                                          len(names))),
                  columns = names,
                  index = index)
print(df)<jupyter_output>Jonas  Leon  ...   Mila  Lina
Januar       146   160  ...    160   169
Februar      177   136  ...    132   173
März         158   198  ...    180   154
April        149   168  ...    124   163
Mai          174   156  ...    165   121
Juni         139   145  ...    142   166
Juli         143   160  ...    146   188
August       131   168  ...    187   162
September    155   127  ...    179   148
Oktober      154   167  ...    195   169
November     166   145  ...    152   163
Dezember     180   122  ...    126   160

[12 rows x 8 columns]<jupyter_text>9. Aufgabe: Kehren Sie das eben erzeugte DataFrame um, sodass der Index den Vornamen und die Spaltennamen den Monatsnamen entsprechen.<jupyter_code># prog4book

new_df = df.transpose()
print(new_df)<jupyter_output>Januar  Februar    ...     November  Dezember
Jonas      146      177    ...          166       180
Leon       160      136    ...          145       122
Finn       140      121    ...          189       120
Guido      199      126    ...          120       175
Lara       172      199    ...          138       174
Hannah     156      178    ...          182       156
Mila       160      132    ...          152       126
Lina       169      173    ...          163       160

[8 rows x 12 columns]
{'fraction_non_alphanumeric': 0.09590088712144387, 'fraction_numerical': 0.08794738452126033, 'mean_word_length': 1.7719372615515048, 'pattern_counts': {'":': 0, '<': 35, '<?xml version=': 0, '>': 31, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 5, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '9', 'dir': 'jupyter-structured-clean-dedup', 'id': '212248', 'license': 'MIT', 'n_tokens_mistral': 2493, 'n_tokens_neox': 2087, 'n_words': 578, 'path': '00_Original/Pandas_DataFrame_AUFGABEN.ipynb', 'repo_name': 'felixdittrich92/numerisches_python', 'size': '6538'}