簡體   English   中英

迭代包含列表的pandas列中的值,並僅檢索唯一值

[英]Iterate over values in pandas column containing lists and retrieve only unique values

這是我無法弄清楚的三個問題,希望有人可以幫助我。

import pandas as pd
data = {'Col1': ['ONE, ONE, NULL', 'ONE, TWO, THREE', 'TWO, NULL, TEN']}
index = pd.Index(['d1','d2','d3'])
data = pd.DataFrame(data,index=index)
pattern = 'ONE|TWO'                 <----QUESTION1
data['Col1'].str.findall(pattern)   <----QUESTION2

問題1:如何更改此正則表達式,以便在“d1”中僅找到“ONE”一次? 現在,將返回ONE發現的每個實例,如下所示。

d1    [ONE, ONE]
d2    [ONE, TWO]
d3         [TWO]

我要這個

d1         [ONE]
d2    [ONE, TWO]
d3         [TWO]

問題2:
我想將列表d1,d2和d3放入一個僅包含唯一值的列表中。 這是這樣的:

set(d1 + d2 + d3) ---> ['ONE', 'TWO']


問題3:
如果我會做這樣的事情:

data['Col2'] = data['Col1'].str.findall(pattern)

我如何迭代Col2中的每一行以獲得與我在Question2中所要求的相同的結果?

你可以使用reduce(over set.union):

In [11]: reduce(set.union, data['Col1'].str.findall(pattern), set())
Out[11]: {'ONE', 'TWO'}

另一種選擇是使用列表理解:

In [12]: [w for w in ['ONE', 'TWO'] if data['Col1'].str.contains(w).any()]
Out[12]: ['ONE', 'TWO']

對於問題1,請嘗試: data['Col1'].str.findall(pattern).apply(set)

對於問題2,3,試試這個: {x for s in data['Col1'].str.findall(pattern).apply(set) for x in s}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM