我是一名研究生,并且正在使用python来为我的研究准备我的数据集。我对使用python没有那么自信,所以我非常感谢你的帮助。
继续上一个问题(how to do re.compile() with a list in python)
我想在数据框中将这种字识别应用于一列。
import pandas as pd
from itertools import compress
fruits = ['apple', 'banana', 'cherry']
df = pd.DataFrame({"a":['green apple and red cherry', 'blue', 'apple, banana and cherry', 'banana banana split'],"b":[0,2,0,1]},
index = [1,2,3,4])
# Create a list to store the data
grades = []
grades = list(compress(fruits, (f in df.a for f in fruits)))
df['grades'] = pd.Series(grades)
这没有成功,因为生成了一个数据框,其中所有的“等级 - 值”#39;是NaN。
此外,我想知道这是否也可以使用句子列表而不是单词列表。以及如何做到这一点。
提前谢谢!
答案 0 :(得分:0)
这是一种方式:
{{1}}
答案 1 :(得分:0)
In [422]: t = df.a.str.split(expand=True)
In [423]: df['grades'] = t[t.isin(fruits)].T.agg(lambda x: x.dropna().str.cat(sep=', '))
In [424]: df
Out[424]:
a b grades
1 green apple and red cherry 0 apple, cherry
2 blue 2
3 apple, banana and cherry 0 banana, cherry
4 banana banana split 1 banana, banana
说明:
In [425]: t
Out[425]:
0 1 2 3 4
1 green apple and red cherry
2 blue None None None None
3 apple, banana and cherry None
4 banana banana split None None
In [426]: t.isin(fruits)
Out[426]:
0 1 2 3 4
1 False True False False True
2 False False False False False
3 False True False True False
4 True True False False False
In [427]: t[t.isin(fruits)]
Out[427]:
0 1 2 3 4
1 NaN apple NaN NaN cherry
2 NaN NaN NaN NaN NaN
3 NaN banana NaN cherry NaN
4 banana banana NaN NaN NaN