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

2024-05-12 23:36:09 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有这样的桌子:

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中为唯一hID计算5。如何在python中使用pandas数据帧来实现这一点?或者一个核阵列?类似地,如果要做count(hID),我将在Qlik中得到8。在大熊猫身上做这件事的等效方法是什么?


Tags: dataframepandasdfuidpdclaude桌子brian
3条回答

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

df.nunique()

dID    3
hID    5
mID    3
uID    5
dtype: int64

pandas 0.20.0^{}中新建

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是数据帧的名称,则可以执行以下操作:

data['race'].value_counts()

这将显示不同的元素及其出现次数。

计算距离值,使用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

相关问题 更多 >