我是熊猫新手。我有一个很大的数据集,其中包含每天的温度值。我需要按月明智地计算温度。
我正在考虑以下方法:
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天)并带来预期的输出或类似结果输出。任何帮助,将不胜感激。谢谢!
答案 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