首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pandas迭代行在函数中不起作用

Pandas迭代行在函数中不起作用
EN

Stack Overflow用户
提问于 2019-08-15 10:43:41
回答 1查看 664关注 0票数 0

我正在创建一个小规模的调度脚本,并且在iterrows方面有一些问题。这些是非常小的df,所以时间是最少的(6行和7/8列),尽管我猜这些循环不是最有效的-我对此还是个新手!

这是我已经拥有的

代码语言:javascript
运行
复制
data = {'Staff 1': ['9-5', '9-5', '9-5', '9-5', '9-5'], 
         'Staff 2': ['9-5', '9-5', '9-5', '9-5', '9-5'],
            'Staff 3': [ '9-5', '9-5', '9-5', '9-5', '9-5']}
dataframe_1 = pd.DataFrame.from_dict(data, orient='index',
                        columns=['9/2/19', '9/3/19', '9/4/19', '9/5/19', '9/6/19'])

data2 = {'Name': ['Staff 1','Staff 2','Staff 3'], 'Site': ['2','2','2'], 'OT':['yes','yes','no'],
         'Days off':['','9/4/19','9/4/19'], '':['','','9/5/19']}

dataframe_2 = pd.DataFrame.from_dict(data2)


def annual_leave(staff, df):
    df = df.reset_index(drop=True)
    for index, row in df.iterrows():
        days_off = []
        if df.loc[index,'Name'] == '{}'.format(staff):
            for cell in row:                
                days_off.append(cell)
            del days_off[0:3]
        else:
            pass

        return days_off

for index, row in dataframe_1.iterrows():
    print(annual_leave(index, dataframe_2))

我在一些地方添加了一些'print(index)‘,看看我是否能找出哪里出了问题。

我发现底部的iterrows循环遍历每一行。然而,函数中的itterrows循环只查看第一行,我不明白为什么。

我尝试遍历dataframe_1中的每个职员姓名(索引),并根据dataframe_2中的列名检查该职员姓名,然后我想去掉dataframe_2中特定行的前3列(因此是list和del days_off0:3)。

然而,在本例中,它为'Staff 1‘、'Staff 2’和'Staff 3‘运行了底部for iterrows循环(在函数外部)。但是函数内部的itterrows循环只检查'Staff 1‘名称。

这意味着它只对'Staff 1‘有效,但当为'Staff 2’调用函数时,它只检查dataframe_2的第一行中的'Staff 2‘-并且找不到它,因为它在第二行。

这有什么意义吗?

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2019-08-15 10:56:02

您是否尝试过调用该函数?执行上面给出的代码只会创建一个函数,您需要通过传递适当的参数来调用它来查看输出。我在代码中找不到任何其他错误。如果我错了,请改正。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57504287

复制
相关文章

相似问题

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