2015-12-24 6 views
2

Учитывая следующий кадр данных:Панды добавить количество уникальных столбцов

import pandas as pd 
df = pd.DataFrame(
    {'A' : ['foo', 'foo', 'foo', 'foo', 
      'bar', 'bar', 'bar', 'bar'], 
    'B' : [2, 4, 4, 2, 5, 4, 3, 2]}) 
df 

    A  B 
0 foo  2 
1 foo  4 
2 foo  4 
3 foo  2 
4 bar  5 
5 bar  4 
6 bar  3 
7 bar  2 

Я хотел бы столбец («C») из подсчета уникальных значений для «B» в группе «A», как это с помощью функция лямбда x:

A  B C 
0 foo  2 2 
1 foo  4 2 
2 foo  4 2 
3 foo  2 2 
4 bar  5 1 
5 bar  4 1 
6 bar  3 1 
7 bar  2 1 

Заранее благодарен!

+0

Как вы получите 1 уникальное значение для B для "bar «группа? – DSM

+0

@ DSM, я думал, что это то же самое, я думаю, что это количество каждого элемента на группу, два и два на четвертых в первом и на 5 из 4 и т. Д. В следующем. Как 'df.groupby (" A ") [" B "]. Value_counts()' –

ответ

4

Если компьютер прямо о своей цели, может быть

>>> df["C"] = df.groupby(["A","B"])["A"].transform("count") 
>>> df 
    A B C 
0 foo 2 2 
1 foo 4 2 
2 foo 4 2 
3 foo 2 2 
4 bar 5 1 
5 bar 4 1 
6 bar 3 1 
7 bar 2 1 

даст вам то, что вы хотите? Мы группируем пары (A, B).


Cute Немного истории: это первоначально то, что я сделал, но потом я попробовал еще раз и обнаружил, что мне не нужен ["A"]. Но причина, по которой она работала во второй раз без этого, заключалась в том, что у меня был столбец C, поэтому было что-то для того, чтобы код действовал .. (sigh)

+0

Я думаю, вы прибили его. –

+0

Я должен был 'df [" C "] = df.groupby ([" A "," B "]) [" A "]. Transform (" count ")', чтобы избежать «ValueError: неправильное количество переданных элементов 0, размещение подразумевает 1' –

+1

@PadraicCunningham: aargh, я знаю почему. Я верну его. – DSM

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