Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将列表值与不完全相等的dataframe列进行比较?_Python_Pandas - Fatal编程技术网

Python 如何将列表值与不完全相等的dataframe列进行比较?

Python 如何将列表值与不完全相等的dataframe列进行比较?,python,pandas,Python,Pandas,我是Python新手,我正在尝试使用Pandas清理csv 我当前的数据帧如下所示: 时间摘要 0 10 ABC公司 14 XYZ公司 2.20令人敬畏的公司 3.4记录B 我有一个列表,看起来像: clients=['ABC','XYZ','Awesome'] 我面临的挑战是从数据帧中提取与列表中的任何值相等的值 我希望我的数据框如下所示: 时间摘要客户端 0 10 ABC公司ABC 14公司XYZ XYZ 2.20令人敬畏的公司令人敬畏 3 4记录B NaN 我已经研究了regex、.

我是Python新手,我正在尝试使用Pandas清理csv

我当前的数据帧如下所示:

时间摘要
0 10 ABC公司
14 XYZ公司
2.20令人敬畏的公司
3.4记录B
我有一个列表,看起来像:

clients=['ABC','XYZ','Awesome']
我面临的挑战是从数据帧中提取与列表中的任何值相等的值

我希望我的数据框如下所示:

时间摘要客户端
0 10 ABC公司ABC
14公司XYZ XYZ
2.20令人敬畏的公司令人敬畏
3 4记录B NaN

我已经研究了regex、.any和in,但我似乎无法在for循环中获得正确的语法。

您可以执行以下操作:

将numpy导入为np
def匹配_客户端(摘要):
client_matches=[客户端对客户端在['ABC','XYZ','Awesome']中,如果客户端在摘要中]
如果len(客户端_匹配)==0:
返回np.nan
其他:
返回“,”.join(客户端匹配)
df['Client']=df['Summary'].map(匹配客户端)

为了补充@Simon的答案,如果您想将其应用于不同的客户机,也可以将客户机列表作为参数传递

import numpy as np

def match_client(summary, clients):
    client_matches = [client for client in clients if client in summary]
    if len(client_matches) == 0:
        return np.nan
    else:
        return ', '.join(client_matches)

clients = ['ABC', 'XYZ', 'Awesome']
df['Client'] = df['Summary'].map(lambda x: match_client(x, clients))
您只需要使用lambda函数,就可以将
客户机
作为一个额外参数传递到
映射

pandas.Series.str.extract
假设只有一场比赛

df.assign(Client=df.Summary.str.extract(f"({'|'.join(clients)})"))

   Time              Summary   Client
0    10          ABC Company      ABC
1     4          Company XYZ      XYZ
2    20  The Awesome Company  Awesome
3     4             Record B      NaN

pandas.Series.str.findall
可能还有更多。。。你永远不知道

df.join(df.Summary.str.findall('|'.join(clients)).str.join('|').str.get_dummies())

   Time              Summary  ABC  Awesome  XYZ
0    10          ABC Company    1        0    0
1     4          Company XYZ    0        0    1
2    20  The Awesome Company    0        1    0
3     4             Record B    0        0    0

使用
.map
比使用
.apply
有什么好处吗?因为我们使用的是一个系列,所以两者都是可能的。您可以在此处阅读更多内容: