将Dataframe列的值与列表进行比较,并保持来自Dataframe列的字符串顺序。

3

我有一个单词列表,想要匹配数据框中某一列中的单词,并仅存储那些匹配的单词。问题在于这些单词是按照列表的顺序存储的,而我想保留数据框的原始顺序。这是我的数据框:

import pandas as pd

df = pd.DataFrame({'a': ['Boston Red Sox', 'Chicago White Sox']})

我有一个字符串列表:

my_list = ['Red', 'Sox', 'White']

我想要的结果应该是这样的:
       a     
0  Red Sox  
1  White Sox  

然而我遇到了以下的结果:

       a     
0  Red Sox  
1  Sox White 

我现在使用的代码是:

df['a'] = df.apply(lambda x: ' '.join([i for i in my_list if i.lower() in x['a'].lower().split()]), axis=1)
2个回答

3

您可以在数据框中拆分字符串并将其与my_list中的字符串进行比较:

my_list = ['Red', 'Sox', 'White']

df['b'] = df['a'].apply(lambda s: ' '.join(w for w in s.split() if w.capitalize() in my_list))
print(df)

输出:

                   a          b
0     Boston Red Sox    Red Sox
1  Chicago White Sox  White Sox

0

我会避免使用apply,而是采用双重列表推导式

df["a"] = [" ".join([w for w in r.split() if w in my_list]) for r in df["a"]]

输出:

print(df)

           a
0    Red Sox
1  White Sox

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接