像Qlik中那样在pandas数据框中的列中计算唯一值?


106

如果我有这样的表:

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']
})

我可以count(distinct hID)在Qlik中提出5个唯一的hID。我该如何在Python中使用Pandas数据框?还是一个numpy数组?同样,如果这样做,count(hID)我将在Qlik中得到8。在大熊猫中做这件事的等效方法是什么?


@piRSquared谢谢。我可以做类似df [['dID','hID']]。agg(['count','size','nunique'])之类的东西,并且可以正常工作。但是,与groupby结合使用时,它不起作用。因此df [[['dID','hID']]。groupby('mID')。agg(['count','size','nunique'])说KeyError。有没有办法选择特定的列并应用条件?
Alhpa Delta

三种方式 df[['mID', 'dID','hID']].groupby('mID').agg(['count', 'size', 'nunique'])
piRSquared

df[['dID','hID']].groupby(df['mID']).agg(['count', 'size', 'nunique'])
piRSquared '17

1
df.groupby('mID')[['dID', 'hID']].agg(['count', 'size', 'nunique'])
piRSquared

Answers:


192

计算不同的值,使用nunique

df['hID'].nunique()
5

仅计算非空值,请使用count

df['hID'].count()
8

计算包括空值在内的总值,请使用size属性:

df['hID'].size
8

编辑添加条件

使用布尔索引:

df.loc[df['mID']=='A','hID'].agg(['nunique','count','size'])

或使用query

df.query('mID == "A"')['hID'].agg(['nunique','count','size'])

输出:

nunique    5
count      5
size       5
Name: hID, dtype: int64

谢谢!我们如何添加条件?像nunique的mID ='A'吗?
Alhpa Delta

73

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

data['race'].value_counts()

这将向您显示不同的元素及其发生的次数。


如果您希望每个独特项目的比例也可以。data['race'].value_counts(normalize=True)

25

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

df.nunique()

dID    3
hID    5
mID    3
uID    5
dtype: int64

新进 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

您始终能够agg在内完成groupbystack最后使用了,因为我更喜欢演示文稿。

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

谢谢!我们如何添加条件?像nunique的mID ='A'吗?
Alhpa Delta

@AlhpaDelta我在末尾添加了一些内容。希望能
有所



-3

您可以通过使用len函数来使用唯一属性

len(df ['hID']。unique())5

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.