从二维数组单元格的pandas列中获取唯一值

时间:2019-03-15 19:53:14

标签: python pandas

我有一个pandas DataFrame,其中一列中的每个单元格都是二维数组。

EX:观察值1的列items的值为['Baseball', 'Glove','Snack']

当我在单个单元格上使用.unique时,将基于整个数组的值而不是数组中的单个值来分析每个单元格。

如何遍历每个单元格中的每个数组以确定列中项目的真正唯一数量?谢谢

  Items
0 ['Baseball', 'Hockey Stick', 'Mit']
1 ['Mit', 'Tennis Racket']
2 ['Baseball', 'Helmet']

这些都作为唯一值返回,我想获得每个列表中每个值的唯一计数。

2 个答案:

答案 0 :(得分:0)

您可以在感兴趣的列上使用np.uniquenp.concatenate。我在下面做了一个例子:

import pandas as pd
import numpy as np

df = pd.DataFrame({'fruits':(np.array(['banana', 'apple']), np.array(['cherry', 'apple']))})
#   items
#0  [banana, apple]
#1  [cherry, apple]
np.concatenate(df.fruits.values) #.values accesses the numpy array representation of the column
#array(['banana', 'apple', 'cherry', 'apple'],
#      dtype='<U6')
np.unique(np.concatenate(df.fruits.values)) #unique items
#array(['apple', 'banana', 'cherry'],
#      dtype='<U6')
np.unique(np.concatenate(df.fruits.values), return_counts=True) #counts
#(array(['apple', 'banana', 'cherry'],
#   dtype='<U6'), array([2, 1, 1]))
subset = df.fruits.dropna() # getting rid of NaNs
subset.loc[subset.map(len)!=0] #get rid of zero-length arrays
#0    [banana, apple]
#1    [cherry, apple]
#Name: fruits, dtype: object
np.unique(np.concatenate(subset.loc[subset.map(len)!=0].values), return_counts=True) #This works as desired
#(array(['apple', 'banana', 'cherry'],
   dtype='<U6'), array([2, 1, 1]))

答案 1 :(得分:0)

我将chain的{​​{1}}方法与itertools s一起使用以解决以下问题。

set

# you have a dataframe called data with the column items. from itertools import chain unique_lists_in_items = data.items.unique().tolist() set_of_items = set(chain(*unique_lists_in_items)) 是您想要的。