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

Posted

技术标签:

【中文标题】Groupby - 具有重复值的熊猫 df 计数【英文标题】:Groupby - count of pandas df with duplicate values 【发布时间】:2019-10-13 11:39:48 【问题描述】:

我正在尝试使用重复值执行熊猫dfgroupby count。我希望只返回不重复的值。对于预期的输出,我只想确定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      

【问题讨论】:

你能解释一下你是如何得到你想要的输出的逻辑吗?您是否在计算每列每个日期的唯一值? @Erfan,每列有6个与指定日期相关的值。但是,当对Val_AVal_B 进行分组时,只有 3 个独立值。如,非重复值。 【参考方案1】:

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

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

        Val_B
Date    
1/2/18  3

【讨论】:

【参考方案2】:

原则上,你可以通过

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

【讨论】:

这工作@Gwang-Jin Kim。我想我想多了。我可以删除不需要的列并重命名剩余的列【参考方案3】:

如果我对您的理解正确,您希望为Date 中的每个组返回Val_AVal_B 列中的唯一组合:

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

【讨论】:

【参考方案4】:

试试这个:

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


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

【讨论】:

以上是关于Groupby - 具有重复值的熊猫 df 计数的主要内容,如果未能解决你的问题,请参考以下文章

在唯一列值的熊猫上应用计数器[重复]

删除熊猫数据框中具有特定值的行[重复]

熊猫如何使用 groupby 将 NaN 值替换为平均值 [重复]

总结一个熊猫数据框,单列[重复]

熊猫数据框:在固定其他列的列中提取具有特定标准/条件最小值的数据[重复]

groupby 并获得出现率最高的熊猫条目[重复]