熊猫迭代功能不起作用

时间:2019-08-15 02:43:41

标签: python pandas

我正在创建一个小型调度脚本,并且在迭代过程中遇到了一些问题。这些是非常小的df,因此时间最少(6行,也许7/8列),尽管我猜这些循环并不是最有效的-我对此很陌生!

这就是我已经拥有的

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列(因此,列表和del days_off [0:3])。

但是,在此示例中,它正在为“工作人员1”,“工作人员2”和“工作人员3”的iterrows循环(在函数外部)运行底部。但是该函数内部的itterrows循环仅根据“ Staff 1”名称进行检查。

这意味着它仅适用于“ Staff 1”,但是当该函数被称为“ Staff 2”时,它仅在dataframe_2的第一行中检查“ Staff 2”,而未找到它,因为它在第二行。

这有意义吗?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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