У меня есть большой набор данных, который выглядит так:

 Year    Month    Day    Hour   Count   Value
 2017      1       1      1       59      0
  ..       ..     ..      ..       ..    ..
 2011      12      29     23      60     12 

Я пытаюсь использовать Pandas для генерации средних значений для столбца Значение за тот же месяц, день и час.

Я использовал это в прошлом:

df = pd.read_csv('pathtofile/values.csv')
df1 = df.groupby([df.Month,df.Day,df.Hour]).mean()

Однако новый df1 не будет усреднять столбец «Значение», однако он обеспечивает среднее значение для столбца «Количество и год» (которые меня не интересуют). Я думаю, что это как-то связано с данными в столбце Значение, так как большинство значений равны нулю. Я пытался заменить все нулевые значения нулевыми, однако безрезультатно.

Что-то мне не хватает?

1
Eamon Murphy 13 Мар 2018 в 21:10

2 ответа

Лучший ответ

Пытаться

df['Value'] = df['Value'].apply(pd.to_numeric, errors='coerce')
df.groupby(['Month', 'Day', 'Hour']).agg({'Value': np.mean})
1
Mihai-Andrei Dinculescu 13 Мар 2018 в 18:28

Я смог запустить код, как и ожидалось.

Я сделал свой собственный тестовый файл под названием «values.txt» и выглядел как

Year,Month,Day,Hour,Count,Value
2017,1,1,1,59,0
2016,1,1,1,45,12
2014,2,3,4,34,43
2013,1,1,1,12,56

Затем я вошел

>>> import pandas as pd
>>> df = pd.read_csv('values.txt')
>>> df
   Year  Month  Day  Hour  Count  Value
0  2017      1    1     1     59      0
1  2016      1    1     1     45     12
2  2014      2    3     4     34     43
3  2013      1    1     1     12     56

И наконец я достиг результата

>>> df1 = df.groupby(['Month', 'Day', 'Hour'])
>>> df1['Value'].mean()
Month  Day  Hour
1      1    1       22.666667
2      3    4       43.000000
Name: Value, dtype: float64

Я думаю, что я согласен с Полом H. Вы должны проверить, является ли столбец строкой. Как и у меня есть успех с:

>>> df1 = df.groupby(['Month', 'Day', 'Hour']).mean()
>>> df1
                       Year      Count      Value
Month Day Hour                                   
1     1   1     2015.333333  38.666667  22.666667
2     3   4     2014.000000  34.000000  43.000000

Можете ли вы редактировать вывод при печати df1?

0
akozi 13 Мар 2018 в 18:38