按group1和group2分组统计num1与num2唯一组合的行数
解决方法
首先构造目标DataFrame:
import pandas as pd data = { 'group1': ['A', 'A', 'A', 'A', 'A', 'B', 'B'], 'group2': ['xx', 'xx', 'xx', 'xx', 'xx', 'xy', 'xy'], 'num1': [1, 1, 1, 1, 1, 4, 3], 'num2': [2, 2, 2, 3, 3, 6, 7], } df = pd.DataFrame(data)
你的尝试代码逻辑有误:transform的lambda函数无法接收两个参数x和y,且代码目的是筛选分组中num1和num2各自唯一值数量都大于1的行,和统计num1与num2的唯一组合数的需求不匹配。
下面是两种正确的实现方式:
方式一:分组后去重计数
result = df.groupby(['group1', 'group2']).apply( lambda group: group[['num1', 'num2']].drop_duplicates().shape[0] ).reset_index(name='unique_combinations')
方式二:构造组合列后统计唯一值(更高效)
# 先将num1和num2拼成元组作为组合列 df['comb'] = list(zip(df['num1'], df['num2'])) # 按分组统计组合列的唯一值数量 result = df.groupby(['group1', 'group2'])['comb'].nunique().reset_index(name='unique_combinations')
最终结果
执行后得到的result内容如下:
| group1 | group2 | unique_combinations |
|---|---|---|
| A | xx | 2 |
| B | xy | 2 |
内容的提问来源于stack exchange,提问作者shsh
相关产品推荐
相关产品推荐

