计算大熊猫的每日天数值

时间:2019-03-08 10:36:34

标签: python pandas numpy dataframe

我是熊猫新手。我有一个很大的数据集,其中包含每天的温度值。我需要按月明智地计算温度。

enter image description here

这是我的数据集csv结构: enter image description here

我需要转换为以下csv结构: enter image description here

我正在考虑以下方法:

for(year=2012;year<=2018;year++)
   for(month=1;month<=12;month++)
      for(day=1;day<=31;day++)
         summax+=Temp_max[day]
         summin+=Temp_min[day]
      summax/=day
      summin/=day
      print(summax,summin)

但是我不知道如何在pandas / python中做到这一点,如何在循环中获取列值,如何处理feb天(例如28天,30天,31天)并带来预期的输出或类似结果输出。任何帮助,将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:1)

输入: 根据问题抽样数据

import numpy as np
import pandas as pd

data = {'year': [*np.repeat(2012, 9), 2018],
        'month': [*np.repeat(1, 4), *np.repeat(2, 3), *np.repeat(3, 2), 12],
        'day': [1, 2, 3, 31, 1, 2, 28, 1, 2, 31],
        'Temp max': [28, 26, 27, 26, 27, 26, 26, 26, 25, 26],
        'Temp min': [19, 18, 17, 19, 18, 18, 18, 18, 18, 28]}

df = pd.DataFrame(data)

输出:结果数据框

    year    month   day     Temp max    Temp min
0   2012    1       1       28          19
1   2012    1       2       26          18
2   2012    1       3       7           17
3   2012    1       31      26          19
4   2012    2       1       27          18
5   2012    2       2       26          18
6   2012    2       28      26          18
7   2012    3       1       26          18
8   2012    3       2       25          18
9   2018    12      31      26          28

输入:创建数据透视表,计算“ Temp max”列的最大值和“ Temp min”列的最小值

pivot = pd.pivot_table(data=df,
                       values=['Temp max', 'Temp min'],
                       index=['year', 'month'])

pivot.columns = ['Monthly Temp max', 'Monthly Temp min']

输出:结果数据框

                Monthly Temp max    Monthly Temp min
year    month       
2012    1       26.75               18.25
        2       26.33               18.00
        3       25.50               18.00
2018    12      26.00               28.00

或者:使用熊猫的groupby方法

grouped = (df
           .groupby(['year', 'month'])['Temp max', 'Temp min']
           .mean())

grouped.columns = ['Monthly Temp max', 'Monthly Temp min']

输出:结果数据框

                Monthly Temp max    Monthly Temp min
year    month       
2012    1       26.75               18.25
        2       26.33               18.00
        3       25.50               18.00
2018    12      26.00               28.00

答案 1 :(得分:1)

在熊猫中,使用read_csv来读取您的csv文件

通常使用groupby

import pandas as pd

data = {'year': [*np.repeat(2012, 9), 2018],
        'month': [*np.repeat(1, 4), *np.repeat(2, 3), *np.repeat(3, 2), 12],
        'day': [1, 2, 3, 31, 1, 2, 28, 1, 2, 31],
        'Temp max': [28, 26, 27, 26, 27, 26, 26, 26, 25, 26],
        'Temp min': [19, 18, 17, 19, 18, 18, 18, 18, 18, 28]}

df = pd.DataFrame(data)
# df = pd.read_csv('file.csv')

df2 = df.groupby(['year', 'month'])['Temp max', 'Temp min'].mean()
print(df2)

输出:

             Temp max  Temp min
year month                     
2012 1      26.750000     18.25
     2      26.333333     18.00
     3      25.500000     18.00
2018 12     26.000000     28.00

如果您希望所有年份都使用:

df2 = df.groupby(['year', 'month'])['Temp max', 'Temp min'].mean().reset_index()

   year  month   Temp max  Temp min
0  2012      1  26.750000     18.25
1  2012      2  26.333333     18.00
2  2012      3  25.500000     18.00
3  2018     12  26.000000     28.00