[英]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.