簡體   English   中英

基於其他列條件的唯一值計數

[英]Count of unique values based on conditions of other column

我有一個像下面這樣的 df

{'ID': {0: 1, 1: 1, 2: 2, 3: 2, 4: 3, 5: 3, 6: 4, 7: 5}, 'Color': {0: 'Blue', 1: 'Green', 2: 'Blue', 3: 'No', 4: 'Green', 5: 'No', 6: 'No', 7: 'No'}}

我想區分具有藍色/綠色/藍色或綠色/否的 ID
我的藍/綠/藍或綠腳本是

# Blue
blue = df[df['Color'] == 'Blue']
blue.Color.nunique()

# Green
green = df[df['Color'] == 'Green']
green.Color.nunique()

# Blue or Green
blue_green = df[
    (df['Color'] == 'Blue') | (df['Color'] == 'Green')
]
blue_green.Color.nunique()

# No ?

我不知道如何區分根本沒有藍/綠的 ID。 我對 No 的預期結果是 2(Id 4 和 5)。 任何建議將不勝感激!

好像你正在尋找這樣的東西:

res = df.sort_values('Color').groupby('ID')['Color'].apply((list))\
    .value_counts()

print(res)

[No]             2
[Blue, Green]    1
[Blue, No]       1
[Green, No]      1
Name: Color, dtype: int64

解釋:

  • 使用df.groupby隔離ID組。
  • 接下來,使用apply為每個ID創建列表並獲取value_counts
  • 請注意,我們從列Color上的df.sort_values開始。 這避免了可能以包含相同元素但順序不同的lists結束。

當然,您可以重置索引:

res = res.reset_index(drop=False).rename(columns={'index':'Combination',
                                                  'Color':'Count'})

print(res)

     Combination  Count
0           [No]      2
1  [Blue, Green]      1
2     [Blue, No]      1
3    [Green, No]      1

暫無
暫無

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

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