首页 > 解决方案 > 如何从熊猫数据框中过滤掉值?

问题描述

我有两个数据框。我需要从主数据框中过滤一些值。我需要一些帮助才能做到这一点。请你帮助我好吗?

解释:

df_main:

kol_id|jnj_id|kol_full_nm|foc_area_id|thrc_cd|thrc_nm|dis_area|dis_area_nm|expert_score|pub_scor|rx_scor|refrl_scor|clincl_rsrchr_scor|is_kol
101152|7124166|Constance Ann Benson|1|VIR|VIR|HIV|HIV|45.17|68.5|0|1.69|88|Y
251489|7822721|Mariam S Aziz|1|VIR|VIR|HIV|HIV|44.33|39.5|33|34.26|76|Y
100856|7356682|William Rodney Short|1|VIR|VIR|HIV|HIV|49.49|44|57.5|50.39|48|Y
251460|7933108|Laura A Guay|1|VIR|VIR|HIV|HIV|34.8|63|0|0|48|N

df2:

filter   filter_value    columns       user_id  password    api_name
kol_id    101152          kol_id        vmani4  abede1234      KOL
thrc_nm    VIR            jnj_id        vmani4  abede1234      KOL
jnj_id    7124166         kol_full_nm   vmani4  abede1234      KOL
                          thrc_cd       vmani4  abede1234      KOL

我必须在 df2 的帮助下过滤掉 df_main 中的值。在 df2 中,它有 3 列 - 过滤器、过滤器值和列。所以我必须像这样创建匹配语句 -

if(kol_id == '101152' and thrc_nm == 'VIR' and jnj_id == '7124166')
   Then extract only those column records from df_main which is present in df2['columns']

但问题是filter和filter_value列记录不确定,意味着它是由api_name改变的。所以我需要编写适用于所有 api 的代码。如果您需要更多信息,请告诉我。

表示最终结果

df_result:

kol_id|jnj_id|kol_full_nm|thrc_cd|
101152|7124166|Constance Ann Benson|VIR

标签: pythonpython-3.xpandasdataframe

解决方案


希望这会奏效-

## For this case you'll have to add these 2 lines to avoid comparing str to int
## and to avoid nans in last row of df2
df_final = df_main.copy().astype(str)
df2 = df2[:3].astype(str)

for i, row in df2.iterrows():
    df_final = df_final[df_final[row['filter']]==row['filter_value']]

推荐阅读