【问题标题】:Compare list with data with a list in a python dataframe column将列表与数据与 python 数据框列中的列表进行比较
【发布时间】:2018-02-15 14:39:06
【问题描述】:

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

这行不通,因为会生成一个数据框,其中所有“等级值”都是 NaN。

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

提前谢谢你!

【问题讨论】:

  • df.grades 应该是 ['apple,cherry', 'NAN', 'apple,banana,cherry', 'bananabanana']

标签: python regex pandas dataframe compression


【解决方案1】:

这是一种方式:

df['grades'] = df['a'].apply(lambda x: ', '.join(i for i in x.split(' ') if i in fruits))

# 1     apple, cherry
# 2                  
# 3    banana, cherry
# 4    banana, banana
# Name: grades, dtype: object

【讨论】:

  • 非常感谢!非常感谢!想象一下,我想找到fruits = ['green apple', 'banana', 'cherry'],那么该脚本不再适用于组合green apple。我必须在脚本中进行哪些更改才能让它发挥作用?
  • 这将更昂贵,逻辑将完全不同。您可能想问一个单独的问题。
【解决方案2】:
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

【讨论】:

    猜你喜欢
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多