pandas df中多列的唯一记录计数

Posted

技术标签:

【中文标题】pandas df中多列的唯一记录计数【英文标题】:Count of unique records by multiple columns in a pandas df 【发布时间】:2018-11-05 11:14:09 【问题描述】:

我正在尝试返回 pandas df 中唯一记录的总数。这是由Columns ['D','F'] 中的值决定的。所以 D 列中有特定的地方。F 列显示在这些地方发生了多少事件。每个事件可以有多个功能,但我只对每个地方有多少总事件感兴趣。那么 D 列中的每个位置在 F 列中有多少个计数

所以例如下面的输出将是

ABC-Thu = 2

DEF-Thu = 1

import pandas as pd


d = (
    'C' : ['08:00:00','XX','08:10:00','XX','08:41:42','XX','08:50:00','XX', '09:00:00', 'XX','09:15:00','XX','09:21:00','XX','09:30:00','XX','09:40:00','XX'],
    'D' : ['ABC-Thu','--','ABC-Thu','--','DEF-Thu','--','ABC-Thu','--','DEF-Thu','--','ABC-Thu','--','ABC-Thu','--','DEF-Thu','--','ABC-Thu','--'],
    'E' : ['Num:','','Num:','','Num:','','Num:','','Num:', '','Num:','','Num:','','Num:', '','Num:', ''],
    'F' : ['1','','1','','1','','1','','1', '','2','','2','','1', '','2',''],   
    'A' : ['A','','A','','A','','A','','A','','A','','A','','A','','A',''],           
    'B' : ['Stop','','Res','','Stop','','Start','','Res','','Stop','','Res','','Start','','Start','']
)

df = pd.DataFrame(data=d)

输出:

    A      B         C        D     E  F
0   A   Stop  08:00:00  ABC-Thu  Num:  1
1                   XX       --         
2   A    Res  08:10:00  ABC-Thu  Num:  1
3                   XX       --         
4   A   Stop  08:41:42  DEF-Thu  Num:  1
5                   XX       --         
6   A  Start  08:50:00  ABC-Thu  Num:  1
7                   XX       --         
8   A    Res  09:00:00  DEF-Thu  Num:  1
9                   XX       --         
10  A   Stop  09:15:00  ABC-Thu  Num:  2
11                  XX       --         
12  A    Res  09:21:00  ABC-Thu  Num:  2
13                  XX       --         
14  A  Start  09:30:00  DEF-Thu  Num:  1
15                  XX       --         
16  A  Start  09:40:00  ABC-Thu  Num:  2
17                  XX       --       

如果我使用下面的代码运行它,我会得到 4,因为 D 列中的 --

df1 = df.groupby(['F', 'D']).ngroups

输出:

4

我还想知道是否有更简单的方法来确定 D、F 列每个地方的总计数。而不是总计数。此代码只是一个示例。我的数据集 D 列可以有 50 多个不同的位置,F 列最多可以有 10 个事件。为了添加进一步的约束,每个文件的位置都会发生变化。所以我需要一种快速的方法来确定每次会议的人数。

有没有比逐个计数更有效的方法。我不确定我是否在想这件事。令人困惑的是,B 列中的功能可能会有所不同。它并不总是按重复顺序。

【问题讨论】:

【参考方案1】:

groupbynunique

df.groupby('D').F.nunique().drop('--')

ABC-Thu    2
DEF-Thu    1
Name: F, dtype: int64

【讨论】:

以上是关于pandas df中多列的唯一记录计数的主要内容,如果未能解决你的问题,请参考以下文章

每个唯一值采样一条记录(pandas,python)

Python Pandas 对多列进行值计数并根据结果生成图表

由于多列上的唯一索引,无法更新 Rails 中的父记录和嵌套记录

Panda DF:在有条件的多列中查找最小值

具有多列的groupby,在pandas中具有添加和频率计数[重复]

从pandas apply()返回多列。