Не могу получить значения из столбца 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 шт):
Город попадает в индекс, я сначала не совсем правильно вспомнил. Просто берите его из индекса:
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 %