像Qlik一样计算pandas数据帧中列中的唯一值?

Alh*_*lta 49 python numpy qlikview pandas qliksense

如果我有这样的表格:

df = pd.DataFrame({
         'hID': [101, 102, 103, 101, 102, 104, 105, 101],
         'dID': [10, 11, 12, 10, 11, 10, 12, 10],
         'uID': ['James', 'Henry', 'Abe', 'James', 'Henry', 'Brian', 'Claude', 'James'],
         'mID': ['A', 'B', 'A', 'B', 'A', 'A', 'A', 'C']
})
Run Code Online (Sandbox Code Playgroud)

我可以count(distinct hID)在Qlik中为独特的hID计算出5的计数.我如何使用pandas数据框在python中做到这一点?或者也许是一个numpy阵列?同样,如果要这样做,count(hID)我会在Qlik得到8分.在熊猫中做同样的事情是什么?

Sco*_*ton 89

计算distict值,使用nunique:

df['hID'].nunique()
5
Run Code Online (Sandbox Code Playgroud)

仅计算非空值,使用count:

df['hID'].count()
8
Run Code Online (Sandbox Code Playgroud)

计算包含空值的总值,使用size属性:

df['hID'].size
8
Run Code Online (Sandbox Code Playgroud)

编辑以添加条件

使用布尔索引:

df.loc[df['mID']=='A','hID'].agg(['nunique','count','size'])
Run Code Online (Sandbox Code Playgroud)

或使用query:

df.query('mID == "A"')['hID'].agg(['nunique','count','size'])
Run Code Online (Sandbox Code Playgroud)

输出:

nunique    5
count      5
size       5
Name: hID, dtype: int64
Run Code Online (Sandbox Code Playgroud)


小智 33

如果我假设数据是数据帧的名称,您可以执行以下操作:

data['race'].value_counts()
Run Code Online (Sandbox Code Playgroud)

这将显示不同的元素和它们的出现次数.

  • 如果您想要每个独特项目的比例,您也可以这样做。`data['race'].value_counts(normalize=True)` (6认同)

piR*_*red 14

或者获取每列的唯一值数:

df.nunique()

dID    3
hID    5
mID    3
uID    5
dtype: int64
Run Code Online (Sandbox Code Playgroud)

新的 pandas 0.20.0 pd.DataFrame.agg

df.agg(['count', 'size', 'nunique'])

         dID  hID  mID  uID
count      8    8    8    8
size       8    8    8    8
nunique    3    5    3    5
Run Code Online (Sandbox Code Playgroud)

你总是可以做一个agggroupby.我最后使用stack的是因为我更喜欢演示文稿.

df.groupby('mID').agg(['count', 'size', 'nunique']).stack()


             dID  hID  uID
mID                       
A   count      5    5    5
    size       5    5    5
    nunique    3    5    5
B   count      2    2    2
    size       2    2    2
    nunique    2    2    2
C   count      1    1    1
    size       1    1    1
    nunique    1    1    1
Run Code Online (Sandbox Code Playgroud)


小智 10

对于没有重复的行的唯一计数

df['hID'].nunique()

了解每个唯一行内容重复的数量

df['hID'].value_counts()


Psi*_*dom 9

nunique您可以在熊猫中使用:

df.hID.nunique()
# 5
Run Code Online (Sandbox Code Playgroud)