Groupby - количество панд df с повторяющимися значениями - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь выполнить groupby count панды df с повторяющимися значениями.Я надеюсь вернуть только дублированные значения.Для намеченного вывода я только хочу определить количество значений между Val_A и Val_B.Возвращенный столбец может быть помечен как угодно, как я его переименую.Для целей этого вопроса я обозначу его Val_X

d = ({
    'Date' : ['1/2/18','1/2/18','1/2/18','1/2/18','1/2/18','1/2/18'],
    'Val_A' : [1,1,2,2,1,1],           
    'Val_B' : ['X','X','X','X','Y','Y'],
    })

df = pd.DataFrame(data=d)

df1 = pd.pivot_table(df, index=['Date'],values=['Val_A','Val_B'],aggfunc= 'count')

Вывод:

            Val_A  Val_B
    Date                
    1/2/18      6      6

Предполагаемый вывод:

            Val_X 
    Date             
    1/2/18      3      

Ответы [ 4 ]

2 голосов
/ 28 мая 2019

Удалить дубликаты и передать Val_B в качестве значений,

pd.pivot_table(df.drop_duplicates(), index=['Date'],values=['Val_B'],aggfunc= 'count')

        Val_B
Date    
1/2/18  3
1 голос
/ 28 мая 2019

Попробуйте это:

df.drop_duplicates().groupby('Date').Val_A.count().reset_index(name='Val_x')


Out[1996]:
     Date  Val_x
0  1/2/18      3
1 голос
/ 28 мая 2019

Если я правильно вас понимаю, вы хотите вернуть уникальные комбинации в столбцах Val_A и Val_B для каждой группы в Date:

df.groupby(['Date', 'Val_A', 'Val_B']).size().reset_index()

     Date  Val_A Val_B  0
0  1/2/18      1     X  2
1  1/2/18      1     Y  2
2  1/2/18      2     X  2

Если вы хотите размер:

g = df.groupby(['Date', 'Val_A', 'Val_B'])

len(g)

# Out
3
1 голос
/ 28 мая 2019

В принципе, вы получаете это через

df1 = pd.pivot_table(df.drop_duplicates(), index=['Date'],values=['Val_A','Val_B'],aggfunc= 'count')

Однако ваши примеры не совпадают.

df.drop_duplicates()

     Date  Val_A Val_B
0  1/2/18      1     X
2  1/2/18      2     X
4  2/2/18      1     Y
6  2/2/18      2     Y
...