pandas df中多列的唯一记录数

时间:2018-05-26 05:30:35

标签: python pandas group-by count unique

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

所以下面的输出就是

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列中< - p>

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

输出:

4

我还想知道是否有更简单的方法来确定D列F的每个地方的总数。而不是整体计数。这段代码只是一个例子。对于列D,我的数据集可以有50多个不同的位置,而对于列F,最多有10个事件。要添加更多约束,每个文件的位置都会更改。所以我需要一种快速的方法来确定每次会议的计数。

是否有比按地点计数更有效的方法。我不确定我是否过度思考这个问题。令人困惑的是B列中的功能可能会有所不同。它并不总是重复的顺序。

1 个答案:

答案 0 :(得分:0)

groupbynunique

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

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