基于成对条件过滤

2024-09-30 22:26:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我无法使用groupby条件的结果筛选数据帧。我已经尝试使用带有isin()的掩码,但它不返回成对的条件。你知道吗

假设我有这样一个数据集:

    Dest    Origin  DepDelay
0   TPA     IAD     8.0
1   TPA     IAD     19.0
2   BWI     IND     8.0
4   BWI     IND     34.0
5   JAX     IND     25.0
6   LAS     IND     67.0
8   MCI     IND     2.0
10  MCO     IND     6.0
11  MCO     IND     94.0
... .... ... ...
7009710 ATL MSP     30.0

我想用groupby条件的结果来过滤这个,我得到了所有前5条路线。为了获得路线,我使用了以下代码:

top_5_route = flights_df[flights_df['DepDelay'] > 0].groupby(['Origin', 'Dest'])['Dest'].size().nlargest(5).index.to_list()

热门路线:

[('LAX', 'SFO'),
('DAL', 'HOU'),
('SFO', 'LAX'),
('ORD', 'LGA'),
('HOU', 'DAL')]

我想根据这个标签过滤这个数据帧,只得到“Origin-Dest”的成对条件。例如,新的数据帧应该只包含origin为LAX、Dest为SFO的值以及其他成对条件。你知道吗

如果我使用isin方法,数据帧还将包含值LAX - SFOLAX-HOU。与配对条件不匹配。你知道吗

谢谢!你知道吗


Tags: 数据origin条件路线destgroupbyindhou
2条回答

您可以创建一个名为“Route”的新列:

flights_df['Route'] = flights_df['Origin'] + '-' + flights_df['Dest']

然后按路线分组,得到前5条延误路线

top_5_route = flights_df[flights_df['DepDelay'] > 0.0].groupby('Route').size().nlargest(5)

要过滤这些路由上的flights_df,请执行以下操作:

flights_df[flights_df['Route'].isin(top_5_route.keys())]

IIUC,您需要筛选与元组列表匹配的行,使用:

df.set_index(['Dest','Origin']).loc[top_5_route].reset_index()

相关问题 更多 >