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】:groupby
和 nunique
df.groupby('D').F.nunique().drop('--')
ABC-Thu 2
DEF-Thu 1
Name: F, dtype: int64
【讨论】:
以上是关于pandas df中多列的唯一记录计数的主要内容,如果未能解决你的问题,请参考以下文章
Python Pandas 对多列进行值计数并根据结果生成图表
由于多列上的唯一索引,无法更新 Rails 中的父记录和嵌套记录