Groupby-具有重复值的熊猫df的计数

时间:2019-05-28 00:44:40

标签: python pandas group-by count

我正在尝试使用重复的值对大熊猫groupby进行count df的操作。我希望仅返回未重复的值。对于预期的输出,我只想确定Val_AVal_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 个答案:

答案 0 :(得分:2)

删除重复项并将Val_B传递为值,

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

        Val_B
Date    
1/2/18  3

答案 1 :(得分:1)

原则上,您可以通过

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

答案 2 :(得分:1)

如果我对您的理解正确,那么您想返回Val_AVal_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

答案 3 :(得分:1)

尝试一下:

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


Out[1996]:
     Date  Val_x
0  1/2/18      3