python - 如果一列上的条件为真,则在另一列上找到模式并给出输出 Pandas

标签 python regex pandas

这个问题在这里已经有了答案:





Pandas conditional creation of a series/dataframe column

(10 个回答)


10 个月前关闭。




以下是我正在处理的数据:

df_raw = pd.DataFrame({'Summary':['|ro-rd4_ae20|Issue-backfgound', '|20:36|site1_shutdown'], 'User':[r'UPC\User',r'UPC\Ankita'], 'Name':['Generic User', 'CSD']})
使用正则表达式,我想分别检查 'Name' =CSD 和 'Name' ='Generic User' 的模式,这将创建新列,如果在 re 中匹配模式,则给出真/假值。
df_raw.Name ='CSD'然后申请注册。 exp (df_raw['Summary'].str.findall(r'(([?:[01]?\d|2[0-9]):[0-9]\d|[a-z0-9A-Z-._]+)', expand=False))df_raw.Name = 'Generic User'然后应用reg exp (df_raw['Summary'].str.findall(r'(([?:[01]?\d|2[0-9]):[0-9]\d|[a-z0-9A-Z-._]+)', expand=False))我曾尝试在变量中添加 re 并应用,但这无济于事/不提供输出
请帮忙解决这个问题

最佳答案

您可以使用

import pandas as pd
import re

df_raw = pd.DataFrame({'Summary':['|ro-rd4_ae20|Issue-backfgound', '|20:36|site1_shutdown'], 'User':[r'UPC\User',r'UPC\Ankita'], 'Name':['Generic User', 'CSD']})

def extract(r):
  if r["Name"] == "Generic User":
    return bool( re.search(r'(?:[01]?\d|2[0-9]):[0-9]\d|[a-z0-9A-Z._-]+', r["Summary"]) )
  elif r["Name"] == "CSD":
    return bool( re.search(r'(?:[01]?\d|2[0-9]):[0-9]\d|[a-z0-9A-Z._-]+', r["Summary"]) )
  return False

df_raw["Valid"] = df_raw.apply(extract, axis=1)
输出:
>>> df_raw
                         Summary        User          Name  Valid
0  |ro-rd4_ae20|Issue-backfgound    UPC\User  Generic User   True
1          |20:36|site1_shutdown  UPC\Ankita           CSD   True
df_raw["Valid"]列将包含 TrueFalse值。
注意我删除了一个“野生”[在你的模式开始时,它似乎关闭了。
如果您需要提取匹配使用
def extract(r):
  if r["Name"] == "Generic User":
    m = re.search(r'(?:[01]?\d|2[0-9]):[0-9]\d|[a-z0-9A-Z._-]+', r["Summary"])
    if m: return m.group()
  elif r["Name"] == "CSD":
    m = re.search(r'(?:[01]?\d|2[0-9]):[0-9]\d|[a-z0-9A-Z._-]+', r["Summary"])
    if m: return m.group()
  return ''

>>> df_raw["Valid"] = df_raw.apply(extract, axis=1)
>>> df_raw
                         Summary        User          Name        Valid
0  |ro-rd4_ae20|Issue-backfgound    UPC\User  Generic User  ro-rd4_ae20
1          |20:36|site1_shutdown  UPC\Ankita           CSD        20:36
>>> 

关于python - 如果一列上的条件为真,则在另一列上找到模式并给出输出 Pandas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64622947/

相关文章:

python - 显示每个节点的 Neurolabs 权重/偏差?

python - 自动编码器适用于 MNIST,但对于较大尺寸的图像会崩溃

python - 有没有办法在 Excel-VBA 中调用 Python 代码?

强制在 Jtextfield 中包含数字和字符的 Java 代码

python - 在groupby之后创建日期时间索引

Python 到 Matlab 的转换?

python - 需要转义 Python 正则表达式中特殊字符后的字符?

C# RegEx 删除 span 标记并保留引号 char

python - 将 ".db"字典类型文件读入pandas DataFrame

python-3.x - 滚动窗口问题 : ValueError: Length of passed values is 3, 索引意味着 2