[英]count unique pandas dataframe with condition
我有一個數據框:
df1 = pd.DataFrame({'sku': ['A0', 'A0', 'A2', 'A2', 'A2','A3', 'A3'],
'ID': ['10', 'T1', 'T1', 'T2', 'T2','10', '20']})
我想計算ID的唯一值,但僅當以“ T”開頭時。 理想的結果是:
sku
A0 1
A2 2
A3 0
請指教。
按sku
分組,然后將str.startswith
函數應用於每個組的唯一ID
系列,以計算以“ T”開頭的唯一ID:
>>> df1.groupby('sku').apply(lambda g: pd.Series(g['ID'].unique()).str.startswith("T").sum())
sku
A0 1
A2 2
A3 0
向pd.Series.value_counts
后,可以在過濾數據pd.Series.value_counts
后使用pd.Series.value_counts
。
您可以使用分類數據來確保包括所有鍵:
df1 = pd.DataFrame({'sku': ['A0', 'A0', 'A2', 'A2', 'A3', 'A3'],
'ID': ['10', 'T1', 'T1', 'T2', '10', '20']})
df1['sku'] = df1['sku'].astype('category')
res = df1.loc[df1['ID'].str[0] == 'T', 'sku'].value_counts(sort=False)
print(res)
A0 1
A2 2
A3 0
Name: sku, dtype: int64
對於唯一值,可以使用groupby
+ nunique
:
res = df1[df1['ID'].str[0] == 'T'].groupby('sku')['ID'].nunique()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.