我有一个大数据框,其前5行是:
Date Element Data_Value
0 2010-11-25 TMIN 228
1 2014-08-03 TMAX 332
2 2012-04-03 TMAX 311
3 2009-11-14 TMAX 294
4 2011-10-20 TMIN 220
这些数据是最低和最高温度的每日测量值(TMIN
&安培; TMAX)在2005-2014期间,同一日期有几个TMIN和TMAX(它们是来自不同设备的测量值)。
我需要最低温度
我需要使用以下列创建一个数据框: 第1列:日期,但是在日期和月份(年份并不重要) 第2列:在上述期间内测量的给定日月的温度(Data_Value)的最小值,即12月31日的最小值,从该年份的所有Data_Value中获取最小Data_Value。我需要每个月都这样做。 第3列:此列与前一列类似,但此处不是最小值,而是需要最大值。
所以,我正在寻找的数据框应该是这样的:
Date TMIN TMAX
11-25 151 300
12-31 100 250
. . .
. . .
我正在使用groupby:
per_day = df.Date.dt.to_period("D")
g_day = df.groupby(per_day)
在这里,我可以使用g_day.min()
和g_day.max()
,这样我就可以获取当天数据的最小值和最大值,而这里是我被卡住的地方,我只需要做同样但这些年来(全年采用同一天的最小值和最大值)
答案 0 :(得分:0)
我自己解决了,但答案很糟糕:
data = pd.read_csv('data/C2A2_data/BinnedCsvs_d25/e696f3d79c6a540c6e6467eba0e59a9308653e877a41e5825451599f.csv')
data.drop(labels=['ID','Unnamed: 4', 'Unnamed: 5','Unnamed: 6', 'Unnamed: 7', 'Unnamed: 8', 'Unnamed: 9'],axis=1,inplace=True)
data['Date'] = pd.to_datetime(data['Date'],infer_datetime_format=True)
data.sort_values(by='Date',inplace=True)
per_day = data.Date.dt.to_period("D")
g_day = data.groupby(per_day)
T_min = g_day.min()
T_max = g_day.max()
T_min['Date'] = (T_min['Date']).astype('str').str.split('-').str.get(0)
T_max['Date'] = (T_max['Date']).astype('str').str.split('-').str.get(0)
df_min = pd.DataFrame()
df_max = pd.DataFrame()
for i in T_min['Date'].unique():
df_min[i] = T_min[T_min['Date'] == i]['Data_Value'].reset_index(drop=True)
df_max[i] = T_max[T_max['Date'] == i]['Data_Value'].reset_index(drop=True)
min_2015 = df_min['2015']
max_2015 = df_max['2015']
df_min.drop(labels='2015',axis=1,inplace=True)
df_max.drop(labels='2015',axis=1,inplace=True)
df_min['min'] = df_min.min(axis=1)
df_max['max'] = df_max.max(axis=1)