计数唯一的值在一列熊猫数据框架像在Qlik?

如果我有一个这样的表格:

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

我可以在Qlik中做count(distinct hID)来为唯一的hID计算5。我如何在python中使用熊猫数据框架做到这一点?或者是numpy数组?类似地,如果要执行count(hID),我将在Qlik中获得8。对熊猫来说,同样的方法是什么?

515751 次浏览

你可以在pandas中使用nunique:

df.hID.nunique()
# 5

计数不同的值,使用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

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

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

你总是能够在groupby中执行agg。我在最后使用了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

如果我假设数据是你的数据框架的名称,你可以这样做:

data['race'].value_counts()

这将告诉你不同的元素和它们的出现次数。

你可以使用len函数来使用unique属性

< p > len (df['隐藏'].unique ()) 5 < / p >

要计数列中唯一的值,比如数据帧dfhID,使用:

len(df.hID.unique())

我也在找类似的东西我发现了另一种可以帮助你的方法

  • 如果你想计算空值的数量,你可以使用这个函数:
def count_nulls(s):
return s.size - s.count()
  • 如果你想在你的唯一计数中包含NaN值,你需要将dropna=False传递给nunique函数。
def unique_nan(s):
return s.nunique(dropna=False)
  • 下面是使用泰坦尼克数据集的所有值的总结:
from scipy.stats import mode


agg_func_custom_count = {
'embark_town': ['count', 'nunique', 'size', unique_nan, count_nulls, set]
}
df.groupby(['deck']).agg(agg_func_custom_count)

你可以找到更多的信息这里

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

df['hID'].nunique()

要知道复制的每个惟一行内容的数量

df['hID'].value_counts()