[英]How do I check if all values in a column of a pandas dataframe are equal?
[英]How do I compare list values to a dataframe column that are not exactly equal?
我是Python的新手,正在尝试使用Pandas清理csv。
我当前的数据框如下所示:
Time Summary
0 10 ABC Company
1 4 Company XYZ
2 20 The Awesome Company
3 4 Record B
我有一个看起来像这样的列表:
clients = ['ABC', 'XYZ', 'Awesome']
我面临的挑战是从数据框中提取等于列表中任何值的值。
我希望我的数据框看起来像这样:
Time Summary Client
0 10 ABC Company ABC
1 4 Company XYZ XYZ
2 20 The Awesome Company Awesome
3 4 Record B NaN
我已经研究了正则表达式,.any和in,但是我似乎无法在for循环中获得正确的语法。
您可以执行以下操作:
import numpy as np
def match_client(summary):
client_matches = [client for client in ['ABC', 'XYZ', 'Awesome'] if client in summary]
if len(client_matches) == 0:
return np.nan
else:
return ', '.join(client_matches)
df['Client'] = df['Summary'].map(match_client)
只是为了补充@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函数,即可将clients
作为map
内部的额外参数传递。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.