首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >迭代函数中的数据帧列表

迭代函数中的数据帧列表
EN

Stack Overflow用户
提问于 2020-02-21 05:33:15
回答 1查看 229关注 0票数 1

我有一个超过4000行的数据集,它与全年的日照时数相对应。

我将这个数据帧按月划分到一个列表中,因此我在一个包含12个数据帧的列表中有几个小时的日照。这是一个示例。

代码语言:javascript
运行
复制
      index   YYYY  MM  DD     H  DOY      ANGLE      AZIMUTH        
        812   2020   3  21   6.0   81   0.570550    89.931404  
        813   2020   3  21   7.0   81  11.781984    99.975618  
        814   2020   3  21   8.0   81  22.634332   110.842581  
        815   2020   3  21   9.0   81  32.658711   123.478690  
        816   2020   3  21  10.0   81  41.147775   139.003890 

所以我有一个列表,其中嵌套了像这样的12个数据帧。

现在我想在一个计算阴影投影的函数中按月迭代。

第一步,定义我的月份函数:

代码语言:javascript
运行
复制
def month(n_month):
        df_month = df.loc[df['MM'] == n_month]
        return df_month

第二步在列表中存储月份:

代码语言:javascript
运行
复制
month_list = []
    for i in range(1, 13):
        month_list.append(month(i))

第三步,在预定义的函数上迭代month_list:这个函数包括为每个月的每个日照时间分配一个方位角和一个仰角:

代码语言:javascript
运行
复制
def shade_array (index):
        azimut = df.AZIMUT[index]
        altitude = df.ANGLE[index]
        shade = hillshade_beta(elevation, azimuth = azimut, altitude = altitude)
        return shade

输出是一个数组。

当我试图在月份列表中的每个数据帧上迭代这个函数,并将数组存储在一个新的列表中时,我遇到了这个问题:

代码语言:javascript
运行
复制
array_list = []

for i in month_list:
    array_list.append(shade_array(i))

这将产生以下错误消息:

TypeError: Indexing a Series with DataFrame is not supported, use the appropriate DataFrame column

可以迭代数据帧列表吗?

期望的输出是一个包含12个数组列表的列表,每个数组嵌套在这个二阶列表中,每个数组都属于光栅中每个像素的阴影的值。

EN

回答 1

Stack Overflow用户

发布于 2020-02-21 06:06:13

考虑使用groupby进行月份拆分,然后使用列表理解构建数组列表,其中不需要中间对象month_list。您的主要问题是在shade_array()方法中,其中索引是数据帧。所以它应该是index.AZIMUT而不是df.AZIMUT[index],或者更明确地使用df作为参数:

代码语言:javascript
运行
复制
def shade_array(df):
   azimut = df['AZIMUT']
   altitude = df['ANGLE']
   shade = hillshade_beta(elevation, azimuth = azimut, altitude = altitude)
   return shade

shade_arrays = [shade_array(g) for i, g in df.groupby(['MM'])]

更好的做法是,将字典理解作为索引运行几个月:

代码语言:javascript
运行
复制
import calendar

shade_arrays = {calendar.month_name[i]:shade_array(g) for i, g in df.groupby(['MM'])}

shade_arrays['January']
shade_arrays['February']
shade_arrays['March']
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60328847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档