簡體   English   中英

在熊貓列中查找唯一值,其中每一行都有多個值

[英]Finding unique values in pandas column where each row has multiple values

我在dataframe框中有以下列,其中包含用|分隔的顏色

df = pd.DataFrame({'x': ['RED|BROWN|YELLOW', 'WHITE|BLACK|YELLOW|GREEN', 'BLUE|RED|PINK']})

我想從該列中找到所有唯一的顏色。

預期產量

{'YELLOW', 'BLACK', 'RED', 'BLUE', 'BROWN', 'GREEN', 'WHITE', 'PINK'}

我不在乎它是list還是set

我試過了

df['x'] = df['x'].apply(lambda x: x.split("|"))

colors = []
for idx, row in df.iterrows():
    colors.extend(row['x'])

print(set(colors))

哪個工作正常,但由於數據集很大,我正在尋找更有效的解決方案。

set(df.loc[:, 'x'].str.split('|', expand=True).values.ravel())

要么

set(df.loc[:, 'x'].str.split('|', expand=True).values.ravel()) - set([None])
list(df.x.str.split('|', expand=True).stack().reset_index(name='x').drop_duplicates('x')['x'])

產量

['RED', 'BROWN', 'YELLOW', 'WHITE', 'BLACK', 'GREEN', 'BLUE', 'PINK']

使用帶有set的itertools (可以說是最快的扁平化列表);

import itertools
set(itertools.chain.from_iterable(df.x.str.split('|')))

輸出:

{'BLACK', 'BLUE', 'BROWN', 'GREEN', 'PINK', 'RED', 'WHITE', 'YELLOW'}

functools另一種可能的解決方案幾乎與itertools一樣快:

import functools
import operator
set(functools.reduce(operator.iadd, df.x.str.split('|'), []))

注意,您也可以使用sum() ,它看起來可讀但不那么快。

您也可以set(df['x'].str.split('|').values.sum())

這也會從輸出中刪除None

{'YELLOW', 'RED', 'WHITE', 'BROWN', 'GREEN', 'PINK', 'BLUE', 'BLACK'}

暫無
暫無

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

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