在Pandas中按group列分组计算country列的累计唯一值计数
解决按组计算累计唯一值数量的问题
你需要的是在每个分组内,对country列计算到当前行为止的累计唯一值数量,可以通过groupby结合transform和duplicated、cumsum实现,代码如下:
import pandas as pd # 构造原始DataFrame data = { 'group': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'], 'country': ['usa', 'germany', 'germany', 'france', 'usa', 'germany', 'germany', 'france', 'germany', 'france'] } df = pd.DataFrame(data) # 新增累计唯一值列 df['num_distinct_values'] = df.groupby('group')['country'].transform( lambda x: (~x.duplicated()).cumsum() ) print(df)
代码解释:
df.groupby('group')['country']:按group列分组,针对每个组的country列做单独处理~x.duplicated():在组内标记当前行的country是否是首次出现(True代表首次出现,False代表重复出现).cumsum():对标记结果做累计求和,最终得到到当前行为止的累计唯一值数量
运行后输出结果完全符合预期:
group country num_distinct_values 0 A usa 1 1 A germany 2 2 A germany 2 3 A france 3 4 A usa 3 5 B germany 1 6 B germany 1 7 B france 2 8 B germany 2 9 B france 2
内容的提问来源于stack exchange,提问作者Daniel Wyatt
相关产品推荐
相关产品推荐

