Jika raya kedua yang lalu kita membincangkan penyelesaian julat dalam SQL seperti rencana di bawah
Jana Julat dalam SQL (& Selamat Hari Raya)
Hari Raya kedua dan saya ingin kongsikan satu masalah. Beberapa hari lepas, saya dibelenggu dengan satu soalan/cabaran SQL postgres yang memerlukan saya untuk menjana satu julat yang berterusan berdasarkan jumlah kelayakkan. Walaupun soalan ini dapat diselesaikan dengan menggunakan stored procedures namun saya berkeras dengan idea ia boleh diselesaik…
Hari ini mari kita cuba rungkaikan code ini.
import pandas as pd
# Create the current dataframe
data = {'staff_id': [12345, 23453],
'start_number': [1, 4],
'end_number': [3, 5]}
df_current = pd.DataFrame(data)
print(df_current)
Hasilnya:
staff_id start_number end_number
0 12345 1 3
1 23453 4 5
Dalam contoh dataframe kali ini, kita data yang kita gunakan adalah berkaitan staff_id
dan julat (start_number
dan end_number
). Mungkin staff ini ditugaskan untuk menjaga rak bermula dengan start_number
dan berakhir dengan end_number.
Sekarang kita cuba dapatkan senarai tersebut seperti di bawah:
id staff_id
0 1 12345
1 2 12345
2 3 12345
3 4 23453
4 5 23453
id
yang dijana adalah senarai yang bergantung kepada julat dalam dataframe sebelum ini.
Ini kodnya
# Initialize an empty list to store the result
expected_result = []
# Iterate over each row in the dataframe
for index, row in df_current.iterrows():
# Extract staff_id, start_number, and end_number for the current row
staff_id = row['staff_id']
start_number = row['start_number']
end_number = row['end_number']
# Generate rows for the expected result based on the range of start_number and end_number
for i in range(start_number, end_number + 1):
expected_result.append({'id': i, 'staff_id': staff_id})
# Create the expected result dataframe
df_expected = pd.DataFrame(expected_result)
print(df_expected)
Dalam code di atas, kita menggunakan nested loop.
Loop Pertama: Loop untuk setiap row berdasarkan staff_id
Loop Kedua: Loop untuk dapatkan start_number dan end_number dan append result ke dataframe
expected_result
Dalam kod ini kita lihat ada 2 cara for loop digunakan. Dalam Loop Pertama, kita menggunakan iterrows()
. iterrows akan memulangkan 2 set maklumat, index dan data.
Loop Kedua, ia berpandukan range() pula. Jadi dengan kombinasi range, kita dapat listing tersebut.
Selamat mencuba.