【问题标题】:Pandas dataframe interpolation on two variable for wind analysis with CFD使用 CFD 进行风分析的两个变量的 Pandas 数据帧插值
【发布时间】:2014-07-13 05:07:28
【问题描述】:

我正在为一项新开发项目进行风分析。我将能够预测一年中每个小时的开发过程中的气流模式,作为该特定小时的风速和风向的函数。当然,运行 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 函数,但无法找到使用两个变量的方法。

另外,您认为数据面板是否更适合此类数据的数据结构?

【问题讨论】:

    标签: python pandas group-by interpolation resampling


    【解决方案1】:

    如果你想查看以两个变量为条件的分布特征,你可以继续

    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 的面板包过去缺少标准数据框的许多功能。我相信最近有一些恢复,但我不太了解,因为我并没有真正使用它。肯定有人可以在这里插手。

    【讨论】:

    • 您好,感谢您的回复。你描述的方法是平均一切,甚至坐标。坐标(计算网格的节点)应保持原样。只有速度值 v 应该在整个网格上进行平均。我在excellink中准备了这组样本数据。
    • 嗯,这应该只是您自己编码的起点。你可以定义任何你喜欢的 lambda 函数。如果您只想返回特定列的平均值,请尝试lambda x: x['v'].mean()
    • 我最终使用了不同的方法。我首先将具有未知速度的数据帧附加到具有所有模拟数据的第一个数据帧中。然后我通过对风向进行分箱来剪切这个新的数据框。此时我按 wd,X,Y,Z 对表格进行排序。这为每个网格节点留下了很好的间隙,我可以使用数据帧插值函数简单地通过插值来填充。它适用于小样本数据测试。这些天将尝试使用完整的数据集。
    猜你喜欢
    • 2019-01-30
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2018-09-25
    • 1970-01-01
    • 2016-04-23
    • 2020-08-20
    • 2013-06-11
    相关资源
    最近更新 更多