我有一个pandas DataFrame,其中一列中的每个单元格都是二维数组。
EX:观察值1的列items
的值为['Baseball', 'Glove','Snack']
当我在单个单元格上使用.unique
时,将基于整个数组的值而不是数组中的单个值来分析每个单元格。
如何遍历每个单元格中的每个数组以确定列中项目的真正唯一数量?谢谢
Items
0 ['Baseball', 'Hockey Stick', 'Mit']
1 ['Mit', 'Tennis Racket']
2 ['Baseball', 'Helmet']
这些都作为唯一值返回,我想获得每个列表中每个值的唯一计数。
答案 0 :(得分:0)
您可以在感兴趣的列上使用np.unique
和np.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))
是您想要的。