我正在尝试在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列中的功能可能会有所不同。它并不总是重复的顺序。
答案 0 :(得分:0)
groupby
和nunique
df.groupby('D').F.nunique().drop('--')
ABC-Thu 2
DEF-Thu 1
Name: F, dtype: int64