Не могу получить значения из столбца Dataframe после группировки по этому столбцу

Дан .csv-файл с данными о температуре и влажности воздуха в нескольких городах в определённые даты. Нужно получить средние значения для каждого города и вывести на экран.

Я попробовал сгруппировать данные по городам и найти средние значения для каждого из них. Но когда я пытаюсь получить название города из нового датафрейма, возникает ошибка KeyError: 'city'.

Код моей программы:

import pandas as pd
import seaborn as sns


data = pd.read_csv("/content/drive/MyDrive/Colab Notebooks/weather.csv")
grouped_data = data.groupby(["city"])[["temp", "hum"]].agg(["mean"])

print("Средняя температура и влажность для каждого города:")
for index, row in grouped_data.iterrows():
    print(f"{row['city']}: {row['temp']['mean']} C, {row['hum']['mean']} %")

Пример .csv-файла:

date,city,temp,hum
2023-01-01,Moscow,-5,80
2023-01-01,London,5,90
2023-01-01,New York,10,70
2023-01-02,Moscow,-4,75
2023-01-02,London,6,85
2023-01-02,New York,9,65
2023-01-03,Moscow,-3,70
2023-01-03,London,7,80
2023-01-03,New York,8,60

P.S. Спасибо всем, кто отвил.

В моём случае нужно было использовать index вместо row['city'] или перед выводом превратить index в столбец, используя .reset_index(inplace=True).

Также, благодаря одному из комментариев я использовал метод .to_string() с аргументом formatters= вместо цикла с выводом. Это более удобно, и вывод выглядит лучше, благодаря выравниванию.

Итоговый код:

import pandas as pd
import seaborn as sns


data = pd.read_csv("/content/drive/MyDrive/Colab Notebooks/weather.csv")
grouped_data = data.groupby("city")[["temp", "hum"]].agg(["mean"]).droplevel(1, axis=1)
grouped_data.reset_index(inplace=True)

print("Средняя температура и влажность для каждого города:")
print(grouped_data.to_string(formatters={"city": "{}:".format, 
                                         "temp": "{}°, ".format, 
                                         "hum": "{}%".format}, 
                             index=False,
                             header=False))

Ответы (1 шт):

Автор решения: CrazyElf

Город попадает в индекс, я сначала не совсем правильно вспомнил. Просто берите его из индекса:

import pandas as pd
import seaborn as sns
from io import StringIO

string = """
date,city,temp,hum
2023-01-01,Moscow,-5,80
2023-01-01,London,5,90
2023-01-01,New York,10,70
2023-01-02,Moscow,-4,75
2023-01-02,London,6,85
2023-01-02,New York,9,65
2023-01-03,Moscow,-3,70
2023-01-03,London,7,80
2023-01-03,New York,8,60"""

data = pd.read_csv(StringIO(string))
grouped_data = data.groupby(["city"])[["temp", "hum"]].agg(["mean"])
print("Средняя температура и влажность для каждого города:")
for index, row in grouped_data.iterrows():
    print(f"{index}: {row['temp']['mean']} C, {row['hum']['mean']} %")
            ^^^^^^^

Вывод:

Средняя температура и влажность для каждого города:
London: 6.0 C, 85.0 %
Moscow: -4.0 C, 75.0 %
New York: 9.0 C, 65.0 %
→ Ссылка