pandas 使用panda df.query()过滤列中的字符串值列表

628mspwn  于 2023-01-04  发布在  其他
关注(0)|答案(2)|浏览(194)

我想过滤一个 Dataframe ,其中列有值列表。我想过滤多个条件。我该怎么做?

>>> my_df
        col   values
0         c1  [1,2,3]
1         c2  ['a', 'b', 'c']
2         c3  [11,12,13]

>>> my_df.query(df.query(" `c2` in '['a','b','c']' "))

我希望输出为

col   values
1         c2  ['a', 'b', 'c']
c8ib6hqw

c8ib6hqw1#

这是另一个变通办法。

def list_equals(lst, element):
    return lst == element
    
my_df["equals"] = my_df["values"].apply(list_equals, element=['a', 'b', 'c'])

filtered_df = my_df.query("equals == True")
filtered_df = filtered_df.drop("equals", axis=1)

print(filtered_df)

输出:

col     values
1   c2  [a, b, c]

要将values输出生成为字符串列表,可以再次使用apply()函数。

filtered_df["values"] = filtered_df["values"].apply(str)
print(filtered_df)

输出:

col           values
1  c2  ['a', 'b', 'c']
zkure5ic

zkure5ic2#

您应该将列表转换为tuple

print(my_df[my_df['values'].apply(tuple) == ('a', 'b', 'c')])

要使用query,请先将values列更改为tuple

my_df['values'] = my_df['values'].apply(tuple)
t = ('a', 'b', 'c')
print(my_df.query('values == @t'))

输出:

col     values
1  c2  [a, b, c]

相关问题