python-3.x - 无论年份如何,如何按日期的日月部分对数据进行分组?
问题描述
我有一个大数据框,它的前 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
这些数据是
2005-2014 年期间的最低和最高温度 (TMIN & TMAX) 的每日测量值,并且同一日期有多个 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()
所以我取同一天数据的最小值和最大值,这就是我卡住的地方,我只需要做同样的事情,但多年来(取同一对的最小值和最大值所有年份的日月)
解决方案
我自己解决了,但答案是一团糟:
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)
推荐阅读
- ansible - 如何正确使用 failed_when?
- c++ - 输出值是一个不正确且不随输入变化而变化的大整数
- javascript - Vue Cookies .get('token') 返回 null
- javascript - 我如何将 q 的值增加一而无需每次在 Chrome 扩展中打开 popup.js 时重置
- laravel - Laravel Google App Engine - file_put_contents(/tmp/framework/sessions/r3SSHndYkTT0CZA2fU .....)
- parallel-processing - 如何使用 IAsyncEnumerable 进行并行化
- node.js - 如何在反应js中连接mongodb集合?
- reactjs - 如何更改排序可视化工具的 for 循环中每个条的背景颜色?
- python - Python Flask - oserror errno 22 无效参数
- python - 评估 R^2 分数时出错