我有一个数据帧的选择,用于每日降雨量(pptè24小时)和洪水事件(Fld)的年度记录。它们看起来像这样:
ppt_24H Fld
01-01-2006 0.2 0.0
01-02-2006 0.6 0.0
01-03-2006 0.0 0.0
01-04-2006 11.5 1.0
01-05-2006 10.4 0.0
...
我使用“groupby”函数为每年生成数据帧,在是否发生洪水之间进行分割,并为24小时降雨间隔分配箱,如下所示:
my_intervals = np.array([(-0.1,0),(0.0,0.25),(0.25,0.5),(0.5,1),(1,2),(2,4),(4,6),(6,8),(8,12),(12,16),(16,20),(20,25),(25,30),(30,35),(35,40),(40,45),(45,50),(50,np.inf)])
bins = np.append(my_intervals[:, 0], my_intervals[-1, 1])
grouby函数如下:
Y2006 = pd.DataFrame(TM_YEAR06.groupby([pd.cut(TM_YEAR06['ppt_24H'], bins), 'Fld']).size().unstack().fillna(0).astype(int))
这成功地分割了数据,告诉我在这些选定阈值之间的降雨量有多少天与洪水有关(标记为“1.0”),或者没有(标记为“0.0”)。万岁。但是,根据每套阈值之间是否存在降雨事件,索引会有所不同。例如,对于一年,它看起来是这样的:
Fld 0.0 1.0
ppt_24H
(-0.1, 0.0] 46 1
(0.0, 1.0] 161 1
(1.0, 2.0] 62 0
(2.0, 3.0] 35 0
(3.0, 4.0] 11 1
(4.0, 5.0] 6 0
(5.0, 7.5] 14 0
(15.0, 20.0] 2 1
(25.0, 30.0] 2 0
(30.0, 40.0] 2 0
(60.0, 80.0] 2 0
这很好地分割了数据,但它没有包括所有不符合条件的箱子。我还有20年,我需要合并到同一个数据帧,这是重新调整不同的索引,其中没有一个拥有所有的索引。例如,下面是另一个包含不同索引的虚构示例:
Fld 0.0 1.0
ppt_24H
(-0.1, 0.0] 54 1
(0.0, 1.0] 144 1
(1.0, 2.0] 62 0
(2.0, 3.0] 35 0
(3.0, 4.0] 11 1
(4.0, 5.0] 6 0
(7.5, 10] 14 0
(15.0, 20.0] 2 1
(25.0, 30.0] 6 0
(80.0, 100.0] 2 0
到目前为止,我已经尝试使用'my\u interval'中的列表来索引一个空白的数据帧'YALL',我可以将其合并,但这不起作用。以下是我尝试的代码:
YALL = pd.DataFrame(columns = [0.0 , 1.0], index=[(-0.1,0),(0.0,0.25),(0.25,0.5),(0.5,1),(1,2),(2,4),(4,6),(6,8),(8,12),(12,16),(16,20),(20,25),(25,30),(30,35),(35,40),(40,45),(45,50),(50,np.inf)])
这正如我所期望的,创建了一个充满NaN的数据帧,但是当我尝试将Y2006合并到YALL时,使用:
Y2006 = YALL.merge(Y2006,left_index=True, right_index=True,how='left').fillna(0)
结果是…:
Fld 0.0 1.0 0.0_x 1.0_x
ppt_24H
(-0.1, 0.0) 0 0 0 0
(0.0, 1.0) 0 0 0 0
(1.0, 2.0) 0 0 0 0
(2.0, 3.0) 0 0 0 0
(3.0, 4.0) 0 0 0 0
(4.0, 5.0) 0 0 0 0
(5.0, 7.5) 0 0 0 0
... and so on...
不是我所希望的。。。你知道我能做什么吗
编辑:
我设法弄清楚grouby之后的输出索引是一个CategoricalIndex,然后我利用这个效率极低的代码,研究了如何将我的索引更改为categiocal索引:
CatIndex = pd.Series([(-0.1,0),(0.0,0.25),(0.25,0.5),(0.5,1),(1,2),(2,4),(4,6),(6,8),(8,12),(12,16),(16,20),(20,25),(25,30),(30,35),(35,40),(40,45),(45,50),(50,np.inf)], dtype="category")
idx= pd.Index(CatIndex).astype('category')
YALL = pd.DataFrame(index=idx)
但是现在我遇到了一个错误:
ValueError: setting an array element with a sequence.
对于这行…:
---> 30 Y2006 = YALL.merge(Y2006,left_index=True, right_index=True,how='left').fillna(0)
探索还在继续
如果我理解正确,您可以使用^{} 作为您的
bins
:然后使用} 相同的操作:
IntervalIndex
执行与之前和之后^{相关问题 更多 >
编程相关推荐