如何从pandas数据框中选择一个值是否在列表中?

Rom*_*man 30 python select numpy dataframe pandas

看起来很难看:

df_cut = df_new[
             (
             (df_new['l_ext']==31) |
             (df_new['l_ext']==22) |
             (df_new['l_ext']==30) |
             (df_new['l_ext']==25) |
             (df_new['l_ext']==64)
             )
            ]
Run Code Online (Sandbox Code Playgroud)

不起作用:

df_cut = df_new[(df_new['l_ext'] in [31, 22, 30, 25, 64])]
Run Code Online (Sandbox Code Playgroud)

是否有上述"问题"的优雅和有效解决方案?

wai*_*kuo 62

使用isin

df_new[df_new['l_ext'].isin([31, 22, 30, 25, 64])]
Run Code Online (Sandbox Code Playgroud)

  • 否定使用 ~ 应该足以不做 isin。df_new[~df_new['l_ext'].isin([31, 22, 30, 25, 64])] (5认同)
  • 这是那些不太直观的`pandas`语法功能之一……除非您不知道,否则您不会知道。 (4认同)
  • isin 的负面作用是什么?我正在寻找一种过滤列表元素的方法。 (3认同)

jpp*_*jpp 8

您可以使用pd.DataFrame.query

select_values = [31, 22, 30, 25, 64]
df_cut = df_new.query('l_ext in @select_values')
Run Code Online (Sandbox Code Playgroud)

在后台,这使用顶级pd.eval函数。