如何用Pandas实现类似SQL GROUP BY COUNT的DataFrame统计?
Pandas实现SQL GROUP BY COUNT的正确方式
你的代码无法达成目标,原因是casual_filter['start_station_name']是原始逐行数据,而value_counts()返回的是聚合后的结果(每个车站对应一个计数),两者长度、索引都不匹配,直接用assign会导致数据对齐错误,出现大量缺失值。
以下是两种正确实现方式:
方法一:贴近SQL逻辑的groupby写法
casual_station_name = casual_filter.groupby('start_station_name')\ .size()\ .reset_index(name='total_ride')
groupby('start_station_name')按车站名称分组size()统计每组的行数(对应SQL里的COUNT(*))reset_index(name='total_ride')将分组索引转为普通列,并指定计数列的名称为total_ride
方法二:利用value_counts快速转换
casual_station_name = casual_filter['start_station_name'].value_counts()\ .reset_index()\ .rename(columns={'start_station_name': 'station_name', 'count': 'total_ride'})
value_counts()直接返回每个车站的出现次数reset_index()将索引(车站名)转为列rename()调整列名到你需要的格式
注意:assign方法适合给现有DataFrame添加列,并不适合做聚合操作生成新的统计DataFrame,所以这里不推荐用assign实现需求。
内容的提问来源于stack exchange,提问作者Cornelias
相关产品推荐
相关产品推荐

