这个问题在这里已经有了答案:
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"]
列将包含 True
或 False
值。注意我删除了一个“野生”
[
在你的模式开始时,它似乎关闭了。如果您需要提取匹配使用
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/