将列表与数据与python dataframe列中的列表进行比较

时间:2018-02-15 14:39:06

标签: python regex pandas dataframe compression

我是一名研究生,并且正在使用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。

此外,我想知道这是否也可以使用句子列表而不是单词列表。以及如何做到这一点。

提前谢谢!

2 个答案:

答案 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