У меня есть следующие данные:
per_id month_id area_grp area_hrs level
754 201803 WNY 19.93 OVue
754 201802 MT 0.52 OVue
754 201802 WBS 0.34 OVue
754 201801 WYW 33.04 OVue
754 201801 VC 16.62 OVue
754 201801 PX 3.05 OVue
754 201712 RZN 5.05 OVue
754 201711 WYW 17.85 OVue
754 201711 NLN 0.8 OVue
754 201711 DJr 45.67 OVue
754 201711 TC 11.81 OVue
754 201710 MBN 1.61 OVue
754 201709 WAD 4.72 OVue
754 201709 DJr 23.82 OVue
**147 201803 WBC 13.44 OVue
147 201803 WBS 4.17 OVue
147 201803 WYW 1.80 OVue
147 201802 VD 5.14 OVue
147 201802 LNY 0.05 OVue
147 201801 LEIF 6.94 OVue
147 201801 WBC 25.35 OVue
147 201801 VD 8.53 OVue**
147 201712 MVR 7.17 OSver
147 201711 WDA 9.89 OSver
147 201711 YS 1.65 OSver
147 201711 N1T 3.02 OSver
147 201710 LEIF 1.83 OSver
147 201710 Hi 3.15 OVue
147 201710 TLD 1.43 OVue
147 201710 WBC 21.56 OSver
147 201710 NTT 2.88 OSver
147 201710 WBS 5.64 OSver
147 201710 LNY 2.67 OSver
147 201710 BRV 2.91 OSver
147 201710 N1T 3.78 OSver
Выше приведен пример моих данных, отсортированных по 1-му и столбцам здесь.Эти данные хранятся в таблице в postgresql, и я создаю запрос на основе уровня параметра.
level_list = ['OSver','Ovue']
for i in range(0,len(level_list)):
sql_per_hours = str("""select * from table_name where level = %s ;""") \
%("'"+''.join(level_list[i]) + "'")
df_net = pd.read_sql(sql_per_hours,cnxn)
Теперь для per_id 754, поскольку он работал на одном уровне, должны быть получены все записи для него.Но для людей, которые работали на более чем 1 уровне.Только последняя информация уровня должна быть взята.Таким образом, для per_id 147 должны быть выбраны только первые 8 записей.последний уровень - это значение в уровне для каждого per_id, где month_id является макс.Таким образом, из этой строки, до тех пор, пока не произойдет перерыв в значении, будут взяты строки.
Как я могу построить этот SQL-запрос и вызвать его из Python?Это также поможет мне уменьшить количество данных, которые я получаю для каждого уровня в level_list.
Ожидаемый вывод в виде df_net:
per_id month_id area_grp area_hrs level
754 201803 WNY 19.93 OVue
754 201802 MT 0.52 OVue
754 201802 WBS 0.34 OVue
754 201801 WYW 33.04 OVue
754 201801 VC 16.62 OVue
754 201801 PX 3.05 OVue
754 201712 RZN 5.05 OVue
754 201711 WYW 17.85 OVue
754 201711 NLN 0.8 OVue
754 201711 DJr 45.67 OVue
754 201711 TC 11.81 OVue
754 201710 MBN 1.61 OVue
754 201709 WAD 4.72 OVue
754 201709 DJr 23.82 OVue
147 201803 WBC 13.44 OVue
147 201803 WBS 4.17 OVue
147 201803 WYW 1.80 OVue
147 201802 VD 5.14 OVue
147 201802 LNY 0.05 OVue
147 201801 LEIF 6.94 OVue
147 201801 WBC 25.35 OVue
147 201801 VD 8.53 OVue
Может кто-нибудь помочь мне с этим?