gpt4 book ai didi

python - 过滤 pandas,其中某些列包含列表中的任何单词

转载 作者:行者123 更新时间:2023-12-02 09:33:54 28 4
gpt4 key购买 nike

我想过滤数据框。生成的数据框应包含所有行,其中任意列中包含列表中的任何单词。

我开始使用 for 循环,但应该有更好的 pythonic/pandonic 方式。

示例:

# importing pandas 
import pandas as pd

# Creating the dataframe with dict of lists
df = pd.DataFrame({'Name': ['Geeks', 'Peter', 'James', 'Jack', 'Lisa'],
'Team': ['Boston', 'Boston', 'Boston', 'Chele', 'Barse'],
'Position': ['PG', 'PG', 'UG', 'PG', 'UG'],
'Number': [3, 4, 7, 11, 5],
'Age': [33, 25, 34, 35, 28],
'Height': ['6-2', '6-4', '5-9', '6-1', '5-8'],
'Weight': [89, 79, 113, 78, 84],
'College': ['MIT', 'MIT', 'MIT', 'Stanford', 'Stanford'],
'Salary': [99999, 99994, 89999, 78889, 87779]},
index =['ind1', 'ind2', 'ind3', 'ind4', 'ind5'])


df1 = df[df['Team'].str.contains("Boston") | df['College'].str.contains('MIT')]
print(df1)

因此很清楚如何单独过滤包含特定单词的列

此外,如何过滤包含列表中任何字符串的每列行也很清楚:

df[df.Name.str.contains('|'.join(search_values ))]

其中 search_values 包含单词或字符串列表。

search_values = ['boston','mike','whatever']

我正在寻找一种简短的编码方法

#pseudocode
give me a subframe of df where any of the columns 'Name','Position','Team' contains any of the words in search_values

我知道我能做到

df[df['Name'].str.contains('|'.join(search_values )) | df['Position'].str.contains('|'.join(search_values )) | df['Team'].contains('|'.join(search_values )) ]

但是如果我有 20 列,那么一行代码就会变得一团糟

有什么建议吗?

编辑奖金:当查看列列表(即“名称”、“职位”、“团队”)时,如何包含索引?传递 ['index','Name','Position','Team'] 不起作用。

谢谢。

我看过这个: https://www.geeksforgeeks.org/get-all-rows-in-a-pandas-dataframe-containing-given-substring/

https://kanoki.org/2019/03/27/pandas-select-rows-by-condition-and-string-operations/

Filter out rows based on list of strings in Pandas

最佳答案

您还可以在 level=0 上与 any 进行堆叠:

cols_list = ['Name','Team'] #add column names
df[df[cols_list].stack().str.contains('|'.join(search_values),case=False,na=False)
.any(level=0)]
<小时/>
        Name    Team Position  Number  Age Height  Weight College  Salary
ind1 Geeks Boston PG 3 33 6-2 89 MIT 99999
ind2 Peter Boston PG 4 25 6-4 79 MIT 99994
ind3 James Boston UG 7 34 5-9 113 MIT 89999

关于python - 过滤 pandas,其中某些列包含列表中的任何单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61158898/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com