2016-03-19 3 views
0

Начиная с этим dataframe ДФА:Как получить уникальные значения из нескольких столбцов в панде GroupBy

df = pd.DataFrame({'c':[1,1,1,2,2,2],'l1':['a','a','b','c','c','b'],'l2':['b','d','d','f','e','f']}) 

    c l1 l2 
0 1 a b 
1 1 a d 
2 1 b d 
3 2 c f 
4 2 c e 
5 2 b f 

Я хотел бы выполнить GroupBy над c колонки, чтобы получить уникальные значения l1 и l2 колонн. Для одного колонн я могу сделать:

g = df.groupby('c')['l1'].unique() 

, что правильно возвращает:

c 
1 [a, b] 
2 [c, b] 
Name: l1, dtype: object 

, но с использованием:

g = df.groupby('c')['l1','l2'].unique() 

возвращается:

AttributeError: 'DataFrameGroupBy' object has no attribute 'unique' 

Я знаю, что я могу получить уникальные значения для двух столбцов с (среди другие):

In [12]: np.unique(df[['l1','l2']]) 
Out[12]: array(['a', 'b', 'c', 'd', 'e', 'f'], dtype=object) 

Есть ли способ, чтобы применить этот метод к GroupBy для того, чтобы получить что-то вроде:

c 
1 [a, b, d] 
2 [c, b, e, f] 
Name: l1, dtype: object 

ответ

2

Вы можете сделать это с apply:

g = df.groupby('c')['l1','l2'].apply(np.unique) 
+2

где делает 'уникальный'? Это 'pd.unique'? –

+1

Это np.unique. По-видимому, Canopy импортирует его сам по себе, поэтому я редактирую. Благодарю. – ayhan

Смежные вопросы