python数据帧操作
我有一个不同位置(纬度和经度)的历史降水记录(1990-2010)数据集,有一个具有5个属性(纬度、经度、年、月、prec)的表。 数据集是通过按纬度、经度和时间定义组来组织的。 例如: 输入 预期产量(累计期=3) 我想对该时间序列进行分析,该分析包括对降水量变量进行计算,例如通过坐标对将不同的累积期相加,例如,时间段的3个月和6个月,然后将数据调整为概率分布。 有人知道如何执行这些“总和”吗?考虑到它应该在给定的时间段内,并且不应该使用与另一个给定纬度和经度相关的信息? 补充资料python数据帧操作,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个不同位置(纬度和经度)的历史降水记录(1990-2010)数据集,有一个具有5个属性(纬度、经度、年、月、prec)的表。 数据集是通过按纬度、经度和时间定义组来组织的。 例如: 输入 预期产量(累计期=3) 我想对该时间序列进行分析,该分析包括对降水量变量进行计算,例如通过坐标对将不同的累积期相加,例如,时间段的3个月和6个月,然后将数据调整为概率分布。 有人知道如何执行这些“总和”吗?考虑到它应该在给定的时间段内,并且不应该使用与另一个给定纬度和经度相关的信息? 补充资料 从1990
从1990年到2020年有月度记录,当经度或纬度发生变化时,必须重新开始计算,因为这表明它是另一个点,并且数据(所有记录)为CSV格式。信息是有组织的,没有nan值它看起来像是
。滚动(句点)。sum()
就是您要找的
输入csv文件
代码
请注意,通过预排序更改列顺序,以匹配cumsum
输出。如果需要,可以通过df.sort\u index()
恢复
输出
1.累积应多久重置一次?2.您的数据是您提供的格式的文本文件吗?3.您是对最频繁的3个月进行求和,还是每月进行求和,但从第三个月开始计算求和值?谢谢,对于每个位置,都有1990年到2020年的月度记录,当经度或纬度发生变化时,必须重新开始计算,因为这表明它是另一个点和数据(所有记录)是CSV格式的。这些信息是有组织的,没有nan值。您没有回答我的第3个问题。你的预期产出不像你在文章中描述的那样是3个月的累积。你能解释一下吗?如果我有一个一年(12个月)的序列,并且我想进行3个月的累加,我将存储数据的字段(prec_3)将从3月份开始具有值,即1月、2月和3月的和,对于4月份,它将是2月、3月和4月的和,依此类推。累加一直进行到序列结束,在本例中,由于是另一个位置,因此当纬度或经度发生变化时,将进行累加。累加周期可以是2,3,12
lan/lon/year/month/prec
-17/18/1990/1/0.4
-17/18/1990/2/0.02
-17/18/1990/3/0.12
-17/18/1990/4/0.06
.
.
.
-17/18/2020/12/0.35
-17/20/1990/1/0.2
-17/20/1990/2/0.2
-17/20/1990/3/0.2
-17/20/1990/4/0.2
.
.
.
-17/20/2020/12/0.08
-18/20/1990/1/0.11
-18/20/1990/2/0.11
-18/20/1990/3/0.11
.
.
.
.
lan/lon/year/month/prec/prec_3
-17/18/1990/1/0.4/-
-17/18/1990/2/0.02/-
-17/18/1990/3/0.12/0.54
-17/18/1990/4/0.06/0.2
.
.
.
-17/18/2020/12/0.35/12.58
-17/20/1990/1/0.2/-
-17/20/1990/2/0.2/-
-17/20/1990/3/0.2/0.6
-17/20/1990/4/0.2/0.8
.
.
.
-17/20/2020/12/0.08/35.0
-18/20/1990/1/0.11/-
-18/20/1990/2/0.11/-
-18/20/1990/3/0.11/0.33
.
.
.
.
lan/lon/year/month/prec
-17/18/1990/1/0.4
-17/18/1990/2/0.02
-17/18/1990/3/0.12
-17/18/1990/4/0.06
-17/18/2020/12/0.35
-17/20/1990/1/0.2
-17/20/1990/2/0.2
-17/20/1990/3/0.2
-17/20/1990/4/0.2
-17/20/2020/12/0.08
-18/20/1990/1/0.11
-18/20/1990/2/0.11
-18/20/1990/3/0.11
df = pd.read_csv(path_to_file, sep="/").sort_values(["lan","lon","year","month"])
df["prec_3"] = df.groupby(["lan","lon"])["prec"].rolling(3).sum().values
print(df) # the original ordering is preserved in the index
lan lon year month prec prec_3
10 -18 20 1990 1 0.11 NaN
11 -18 20 1990 2 0.11 NaN
12 -18 20 1990 3 0.11 0.33
0 -17 18 1990 1 0.40 NaN
1 -17 18 1990 2 0.02 NaN
2 -17 18 1990 3 0.12 0.54
3 -17 18 1990 4 0.06 0.20
4 -17 18 2020 12 0.35 0.53
5 -17 20 1990 1 0.20 NaN
6 -17 20 1990 2 0.20 NaN
7 -17 20 1990 3 0.20 0.60
8 -17 20 1990 4 0.20 0.60
9 -17 20 2020 12 0.08 0.48