计算条件下唯一的熊猫数据框

时间:2018-07-16 17:40:51

标签: python pandas dataframe count

我有一个数据框:

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

请告知。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

向量化后,您可以在过滤数据框后使用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()