我有两个称为df和cr的不同数据帧,每个数据帧具有不同的列和行内容,如下所示。我试图找到在cr数据框中显示的安装和删除日期之间,给定机队类型在给定航线上发生的航班数,并使用此总和创建一个新列。df数据帧包含所需的车队、日期、路线和计数信息。我设想需要根据cr每行中包含的信息过滤df。过滤将按车队、路线和包含日期范围进行。过滤df后,将对路由计数求和,并将其放入cr中给定行的新列中,然后移动到下一行。我通常会在python中使用for循环来实现这一点,但我的数据帧非常大,在Pyspark中循环非常繁琐
我目前的尝试:
def component_route_normalized(component_route_count, fleet_month_year_count):
cr=component_route_count
df=fleet_month_year_count
temp=df.filter(
F.col('month-year').between(pd.to_datetime(cr.date_installed),pd.to_datetime(cr.date_removed)) &
F.col('route') == cr.route &
F.col('fleet_type') == cr.fmis_fleet_type_code
)
cr=cr.withColumn('fleet_route_count', F.sum(temp.route_count))
return cr
cr数据帧内容的示例:
+-----------+----------------------+------------------------+------------+-------+-------------+---------+-------+--------------------+--------------+------------+
|aircraft_id|nca_part_number_sse001|nca_serial_number_sse001|repair_cycle| route|part__routing|departure|arrival|fmis_fleet_type_code|date_installed|date_removed|
+-----------+----------------------+------------------------+------------+-------+-------------+---------+-------+--------------------+--------------+------------+
| 1| 25-3246-9-0001| 341| 8|PVG-EWR| 13| PVG| EWR| 777| 2014-12-16| 2015-12-10|
| 1| 25-3246-9-0001| 341| 8|EWR-TLV| 34| EWR| TLV| 777| 2014-12-16| 2015-12-10|
| 1| 25-3246-9-0001| 341| 8|CDG-EWR| 4| CDG| EWR| 777| 2014-12-16| 2015-12-10|
| 1| 25-3246-9-0001| 341| 8|DEL-EWR| 16| DEL| EWR| 777| 2014-12-16| 2015-12-10|
| 1| 25-3246-9-0001| 341| 8|EWR-MXP| 3| EWR| MXP| 777| 2014-12-16| 2015-12-10|
| 1| 25-3246-9-0001| 341| 8|EWR-LHR| 7| EWR| LHR| 777| 2014-12-16| 2015-12-10|
| 1| 25-3246-9-0001| 341| 8|TLV-EWR| 34| TLV| EWR| 777| 2014-12-16| 2015-12-10|
| 1| 25-3246-9-0001| 341| 8|NRT-IAH| 15| NRT| IAH| 777| 2014-12-16| 2015-12-10|
| 1| 25-3246-9-0001| 341| 8|IAH-FRA| 5| IAH| FRA| 777| 2014-12-16| 2015-12-10|
| 1| 25-3246-9-0001| 341| 8|EWR-CDG| 4| EWR| CDG| 777| 2014-12-16| 2015-12-10|
| 1| 25-3246-9-0001| 341| 8|BRU-EWR| 8| BRU| EWR| 777| 2014-12-16| 2015-12-10|
| 1| 25-3246-9-0001| 341| 8|NRT-EWR| 17| NRT| EWR| 777| 2014-12-16| 2015-12-10|
| 1| 25-3246-9-0001| 341| 8|FRA-EWR| 11| FRA| EWR| 777| 2014-12-16| 2015-12-10|
| 1| 25-3246-9-0001| 341| 8|EWR-PVG| 14| EWR| PVG| 777| 2014-12-16| 2015-12-10|
+-----------+----------------------+------------------------+------------+-------+-------------+---------+-------+--------------------+--------------+------------+
df数据帧内容示例:
+----------+-------+----------+-----------+------------+-----------+
|month-year| route|fleet_type|route_count|flight_month|flight_year|
+----------+-------+----------+-----------+------------+-----------+
| 6/1/2014|PHL-ORD| 737| 92| 6| 2014|
| 4/1/2014|IAH-TUL| 787| 23| 4| 2014|
| 4/1/2014|DFW-ORD| 737| 86| 4| 2014|
| 5/1/2014|BRO-IAH| 737| 33| 5| 2014|
| 4/1/2014|YQR-ORD| 787| 9| 4| 2014|
| 3/1/2014|SFO-IAH| 757| 58| 3| 2014|
| 4/1/2014|AUS-IAH| BUS| 55| 4| 2014|
| 5/1/2014|AGU-IAH| 787| 1| 5| 2014|
+----------+-------+----------+-----------+------------+-----------+
车队类型、日期范围和路线上的^{} 后跟^{} 和^{} 应该可以完成这项工作。您可以尝试类似的方法(可能需要调整以处理列类型):
相关问题 更多 >
编程相关推荐