根据配对条件过滤熊猫

时间:2019-02-23 17:56:34

标签: python pandas filter

我无法使用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()

top_5_route:

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

我想根据此标签过滤此数据框,以仅获取“来源-目标”的成对条件。例如,新数据框应仅包含源为LAX,目标为SFO且其他成对条件的值。

如果我使用isin方法,则数据框还将包含值LAX - SFOLAX-HOU。这与配对条件不匹配。

谢谢!

2 个答案:

答案 0 :(得分:2)

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

<div class="parent">
   <div class="child-1">
     <p>dsadsa</p>
     <p>dsadsa</p>
     <p>dsadsa</p>
     <p>dsadsa</p>
     <p>dsadsa</p>
  </div>
   <div class="child-2"></div>
</div>

答案 1 :(得分:1)

您可以创建一个名为“ 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())]