2016-12-25 4 views
1

Как я могу написать следующий код более панд образом:Фильтрация dataframe более эффективным способом

majority_df = df[(df.voting_majority_status_fk == 4) & (df.other == True)] 
minority_df = df[(df.voting_majority_status_fk == 3)] 

мне нужно взять только vp_fk, которые находятся в majority_df и не вminority_df, а затем принимать только уникальные строки из most_df by found unique vp_fk

Как я могу написать следующее далее Pandas way.

majority_vp_fk = set(majority_df.vp_fk) 
minority_vp_fk = set(minority_df.vp_fk) 

clean_majority_vp_fk = majority_vp_fk - minority_vp_fk 

clean_majority_df = majority_df[majority_df.vp_fk.isin(clean_majority_vp_fk)] 
clean_majority_df = clean_majority_df.drop_duplicates(subset=['probe_fk', 'vp_fk', 'masking_box_fk', 'product_fk']) 
+2

могли бы вы предоставить установить небольшие воспроизводимые данные выборки и ожидаемые/желаемые результирующий набор данных? – MaxU

ответ

2

Вот мой «очень Теоретико» (это трудно проверить без выборки данных множеств) решение:

minority_df = df[(df.voting_majority_status_fk == 3)] 
qry = "voting_majority_status_fk == 4 and other == True and vp_fk not in @minority_df.vp_fk" 
result = (df.query(qry) 
      .drop_duplicates(subset=['probe_fk', 'vp_fk', 'masking_box_fk', 'product_fk'])) 
Смежные вопросы