我正在为一项新的开发工作进行风分析。我将能够根据特定小时的风速和风向来预测一年中每个小时的发展中的气流模式。当然,运行8760个风速CFD模拟会花费太多的时间。我的方法是只运行16次模拟(8个风向和2个风速),并根据这些结果插入流量分布。
为了让您了解数据的外观,我创建了一个简化的案例。
X = pd.Series([1,2,3,4,5])
Y = pd.Series([1,2,3,4,5])
Z = pd.Series([1,2,3,4,5])
v1 = pd.Series([2,6,1,7,8])
df1 = pd.DataFrame({'X':X,'Y':Y,'Z':Z,'v':v1})
df1['ws']=3
df1['wd']=180
v2 = pd.Series([3,1,4,2,2])
df2 = pd.DataFrame({'X':X,'Y':Y,'Z':Z,'v':v2})
df2['ws']=3
df2['wd']=0
v3 = pd.Series([2.5,2.3,1.3,7.2,1.4])
df3 = pd.DataFrame({'X':X,'Y':Y,'Z':Z,'v':v3})
df3['ws']=6
df3['wd']=180
v4 = pd.Series([2.4,5.6,6.1,2.3])
df4 = pd.DataFrame({'X':X,'Y':Y,'Z':Z,'v':v4})
df4['ws']=6
df4['wd']=0
df=pd.concat([df1,df2,df3,df4])请注意,最后两列包含该特定模拟的气象风速和风向。这些点(X,Y,Z)可以是100,000的数量级。
现在假设我需要风速(ws)和风向(wd)的中间值的流量分布(X,Y,Z,v)。我希望能够聚合数据并获得每个点(X,Y,Z)的速度场(v)的线性插值,以将其放入公式中:(X,Y,Z)=f( data,ws,wd)
我想我需要使用groupby函数,但是想不出使用两个变量的方法。
另外,您是否认为数据面板对于此类数据更适合数据结构?
发布于 2014-07-13 20:40:12
如果您想查看以两个变量为条件的分布特性,可以按如下方式进行操作
In[10]: df.groupby(['ws', 'wd']).apply(lambda x: x.mean())
Out[10]:
X Y Z v ws wd
ws wd
3 0 3 3 3 2.40 3 0
180 3 3 3 4.80 3 180
6 0 3 3 3 4.10 6 0
180 3 3 3 2.94 6 180关于面板数据,这通常是一个品味的问题,对吗?您是否考虑过要推广的X、Y、Z维度。我通常不会这样做,所以你只剩下时间,这给了你一个时间序列,而不是一个面板。
此外,pandas的面板包过去缺乏许多标准数据帧存在的功能。我相信最近有一些恢复,但我不知道太多,因为我并没有真正使用它。当然,其他人也可以加入进来。
https://stackoverflow.com/questions/24719730
复制相似问题