【问题标题】:filter rows in a pandas dataframe from substrings (keys) in a list and also add new column "key" to dataframe containing the substring matched (key)从列表中的子字符串(键)中过滤熊猫数据框中的行,并将新列“键”添加到包含匹配的子字符串(键)的数据框中
【发布时间】:2022-01-15 17:06:10
【问题描述】:

我是 python 新手。下面的代码根据列表中的子字符串(键)过滤数据帧 df 中的行,并添加一个新列,例如包含子字符串(所有这些子字符串)的“键”。数据帧包含学生、年龄、运动的名称。运动页面包含他参加的所有运动。列表数组包含两个运动名称。此处的代码提取列表中提到的任何运动的名称。我想要数据框中的另一个字段“键”,它提到列表中的匹配项,如“曲棍球”或“足球”或“骑师足球”取决于比赛。 '''

import requests
import pandas as pd
import numpy as np

data = {'Name': ['Tom', 'Joseph','Krish', 'Mohan', 'Ram'], 'Age': [20, 21, 19, 18, 29],'Sport':['football', 'hockey football badminton', 'cricket', 'tennis football', 'hocey cricet']}
df= pd.DataFrame(data)
print(df)
list = ['football','hockey']  # list of sports to filter
list_s = np.array(list)
print(list_s)
#Filter rows from df which are in list_s
dff = df[df['Sport'].str.contains('|'.join(list_s))]
print(dff)

【问题讨论】:

    标签: python pandas dataframe contains string-matching


    【解决方案1】:

    虽然在这种情况下可能只使用子字符串,但更稳健的方法是创建一个新的 DataFrame,将每个名称映射到每个关联的运动,并从中选择所需的名称。

    >>> name_to_sport = (
        df[['Name']]
        .join(df['Sport'].str.split())
        .explode('Sport')
    )
    >>> name_to_sport
         Name      Sport
    0     Tom   football
    1  Joseph     hockey
    1  Joseph   football
    1  Joseph  badminton
    2   Krish    cricket
    3   Mohan     tennis
    3   Mohan   football
    4     Ram      hocey
    4     Ram     cricet
    >>> name_to_sport.loc[name_to_sport['Sport'].isin(['football','hockey']), 'Name'].unique()
    array(['Tom', 'Joseph', 'Mohan'], dtype=object)
    

    【讨论】:

    • 谢谢。发布的数据框仅用于类比。实际数据很大,其中包含公司发布的公告,我想根据大约 100 个或更多关键字进行过滤。现在我为每个关键字循环遍历它,只是为了把它放在一个列中,但这可能不是最佳的做法。我想要一个经过过滤的公告列表,其中包含一个新列,告诉我公告中包含哪些关键字。因此,我需要一个解决方案。
    • 让我放实际数据 DF: Key News 塔塔钢铁结果 Oracle 结果、回购 Airtel 结果、股息:关键字列表是{'result', 'buyback', 'dividend') df 已经过滤来自 df_large 并包含至少一个来自“News”列中列表的关键字。使用 df = df_large[df_large['News'].str.contains('|'.join(list)] 想要 df 中的 'key'由列表中的关键字(一个或多个)填充,例如 Key NEWS 结果 Tata Steel 结果股息、回购 Oracle 结果、回购结果、回购 Airtel 结果、回购
    猜你喜欢
    • 2021-11-15
    • 2019-03-04
    • 2021-01-17
    • 2016-07-30
    • 1970-01-01
    • 2018-04-26
    • 2019-04-24
    • 2021-01-11
    • 2018-01-02
    相关资源
    最近更新 更多