为数据帧创建循环更新并附加基于 2 个变量的系列

问题描述 投票:0回答:1

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
python pandas loops iteration
1个回答
0
投票

代码

我不确定我是否清楚地理解了你的逻辑,但尝试使用以下代码:

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)
© www.soinside.com 2019 - 2024. All rights reserved.