[英]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.