Python与pandas:如何进行非标准分组操作
解决Pandas多特征分组统计的问题
嘿,我懂你的困扰——其实你要做的就是按水果+颜色+口味的组合来统计数量,用基础的groupby就能轻松实现,可能你之前没试过同时按多列分组~
我直接给你上代码和解释,用你的示例数据来演示:
首先构造你的DataFrame:
import pandas as pd df = pd.DataFrame({ 'fruit': ['apple', 'apple', 'apple', 'apple', 'apple'], 'x1': ['red', 'yellow', 'green', 'red', 'red'], 'x2': ['sweet', 'sweet', 'tart', 'sweet', 'sweet'] })
方法一:groupby + size()(最直观)
这是最标准的多列分组统计写法:
# 同时按fruit、x1、x2三列分组,统计每组的行数 grouped_result = df.groupby(['fruit', 'x1', 'x2']).size().reset_index(name='count') print(grouped_result)
groupby(['fruit', 'x1', 'x2']):把这三个列的组合作为分组依据,比如"apple+red+sweet"就是一个独立分组size():统计每个分组里的记录数量reset_index(name='count'):把分组后的索引(也就是那三个列)转成普通列,同时给统计出来的数量列命名为count
方法二:value_counts()(更简洁)
如果想少写点代码,用value_counts()一步到位:
# 指定要统计的列组合,直接输出频次 count_result = df.value_counts(subset=['fruit', 'x1', 'x2']).reset_index(name='count') print(count_result)
value_counts(subset=...):默认会统计指定列的所有唯一组合出现的次数,结果默认按频次降序排列- 同样用
reset_index把结果转成规整的DataFrame格式
最终输出结果
两种方法都会得到你想要的统计结果:
fruit x1 x2 count 0 apple red sweet 3 1 apple yellow sweet 1 2 apple green tart 1
不管之后加入多少其他水果(比如banana、orange),这个逻辑都通用——它会自动按所有水果的特征组合分别统计数量。
内容的提问来源于stack exchange,提问作者Chuck
相关产品推荐
相关产品推荐

