Dataframe Shifts_to_Update 已开发用于提供将用于更新 All_Shifts 数据框的调用时间和每个调用时间的数量的列表。这些班次将从 All_Shifts 表中“Position”列中的“busser”更改为“server”。
在此示例中,需要将 1 个 6:30 班次和 1 个 10:00 班次作为服务器位置。
Shifts_to_Update
Call Time quantity_shifts
0 06:30:00 2
1 10:00:00 1
All_Shifts 表需要相应更新。
All_Shifts
myindex Call Time Position
0 1 06:30:00 busser
1 2 06:30:00 busser
2 3 06:30:00 busser
3 4 06:30:00 server
4 5 07:00:00 busser
5 6 08:00:00 server
6 7 10:00:00 busser
7 8 10:00:00 busser
我创建了这些行来标识需要更新的班次的“myindex”编号。这些是我需要帮助变成循环的代码行。我不想将 .iloc[0] 更新为 .iloc[1] 等我需要处理的所有数据。
o = Shifts_to_Update['Call Time'].iloc[0]
p = Shifts_to_Update['minimum_shifts'].iloc[0]
q = All_shifts[All_shifts['Call Time'] == o].head(p)
r = q[['r']]
r 将返回需要更新的“myindex”数字,第一行和第二行的调用时间为 6:30
myindexB
0 1
1 2
然后这一行将进行更新:
All_shifts.loc[All_shifts['myindex'].isin(r.index), "Position"] = "server"
所以最终结果如下所示:
All_Shifts
myindex Call Time Position
0 1 06:30:00 server
1 2 06:30:00 server
2 3 06:30:00 busser
3 4 06:30:00 server
4 5 07:00:00 busser
5 6 08:00:00 server
6 7 10:00:00 busser
7 8 10:00:00 busser
请提供什么类型的循环可以使用 2 个变量来完成此操作,迭代 Shifts_to_Update 表并附加到 r。我希望最终结果能够在一次运行中更新 6:30 和 10:00 位置,因此最终输出将如下所示:
All_Shifts
myindex Call Time Position
0 1 06:30:00 server
1 2 06:30:00 server
2 3 06:30:00 busser
3 4 06:30:00 server
4 5 07:00:00 busser
5 6 08:00:00 server
6 7 10:00:00 server
7 8 10:00:00 busser
代码
我不确定我是否清楚地理解了你的逻辑,但尝试使用以下代码:
m = {'busser': 'server', 'server': 'busser'}
s1 = All_Shifts.groupby('Call Time').cumcount().add(1)
cond = All_Shifts['Call Time'].map(dict(Shift_to_Update.values)).ge(s1)
All_Shifts['Position'] = All_Shifts['Position'].mask(cond, All_Shifts['Position'].map(m))
所有_班次:
myindex Call Time Position
0 1 06:30:00 server
1 2 06:30:00 server
2 3 06:30:00 busser
3 4 06:30:00 server
4 5 07:00:00 busser
5 6 08:00:00 server
6 7 10:00:00 server
7 8 10:00:00 busser
示例代码
import pandas as pd
data1 = {'Call Time': ['06:30:00', '10:00:00'], 'quantity_shifts': [2, 1]}
data2 = {'myindex': [1, 2, 3, 4, 5, 6, 7, 8],
'Call Time': ['06:30:00', '06:30:00', '06:30:00', '06:30:00', '07:00:00', '08:00:00', '10:00:00', '10:00:00'],
'Position': ['busser', 'busser', 'busser', 'server', 'busser', 'server', 'busser', 'busser']}
Shift_to_Update = pd.DataFrame(data1)
All_Shifts = pd.DataFrame(data2)