簡體   English   中英

根據配對條件過濾大熊貓

[英]Filter pandas based on paired conditions

我無法使用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')]

我想根據這個標簽過濾這個數據幀,只得到“Origin - Dest”的配對條件。 例如,新數據幀應僅包含其中origin為LAX且Dest為SFO且其他配對條件的值。

如果我使用isin方法,數據幀也將包含值LAX - SFOLAX-HOU 這與配對條件不匹配。

謝謝!

IIUC,你需要過濾與你的元組列表匹配的行,使用:

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

您可以創建一個名為“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())]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM