簡體   English   中英

像Qlik一樣計算pandas數據框中列中的唯一值?

[英]Counting unique values in a column in pandas dataframe like in 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']
})

我可以在count(distinct hID)執行count(distinct hID)以得出唯一 hID 的計數為 5。 我如何使用 Pandas 數據框在 python 中做到這一點? 或者也許是一個 numpy 數組? 同樣,如果要執行count(hID)我將在count(hID)得到 8。 在熊貓中這樣做的等效方法是什么?

計算不同的值,使用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

如果我假設 data 是您的數據框的名稱,您可以執行以下操作:

data['race'].value_counts()

這將向您顯示不同的元素及其出現次數。

或者獲取每列的唯一值的數量:

df.nunique()

dID    3
hID    5
mID    3
uID    5
dtype: int64

pandas 0.20.0pandas 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

您可以在熊貓中使用nunique

df.hID.nunique()
# 5

要計算列中的唯一值,例如hID df hID ,請使用:

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)

你可以在這里找到更多信息

您可以使用 len 函數使用唯一屬性

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM