如何在Pandas中按日期分组统计不同分组数量并生成指定DataFrame?
如何用Pandas统计每日不同Groups的数量并生成目标DataFrame?
看起来你需要统计每个日期下不同Groups的唯一数量,而不是简单的行数统计对吧?这里有两种简洁的方法可以实现你的需求:
方法一:直接使用groupby + nunique()
这是最直接的方式,一步到位:
import pandas as pd # 你的原始DataFrame df = pd.DataFrame({ 'Date': ['2017-1-1', '2017-1-1', '2017-1-2', '2017-1-2', '2017-1-3'], 'Groups': ['one', 'one', 'one', 'two', 'two'] }) # 核心代码:按日期分组,统计每个日期下Groups的唯一值数量 result_df = df.groupby('Date')['Groups'].nunique().reset_index(name='Groups_counts') print(result_df)
代码解释:
groupby('Date'):将数据按Date列分组,把同一天的记录归为一组['Groups'].nunique():对每个组的Groups列统计唯一值的个数,这正是你需要的“不同Groups的数量”reset_index(name='Groups_counts'):将分组后的索引(Date)转为普通列,并把统计结果列命名为Groups_counts
方法二:先去重再统计
如果你更习惯分步操作,也可以先去掉同一日期下重复的Groups记录,再统计数量:
import pandas as pd df = pd.DataFrame({ 'Date': ['2017-1-1', '2017-1-1', '2017-1-2', '2017-1-2', '2017-1-3'], 'Groups': ['one', 'one', 'one', 'two', 'two'] }) # 第一步:去掉同一Date+Groups的重复记录 unique_records = df.drop_duplicates(subset=['Date', 'Groups']) # 第二步:按Date分组统计行数(即不同Groups的数量) result_df = unique_records.groupby('Date').size().reset_index(name='Groups_counts') print(result_df)
代码解释:
drop_duplicates(subset=['Date', 'Groups']):只保留每个日期下每个Groups的第一条记录,去掉重复项groupby('Date').size():按日期分组后统计每组的行数,此时的行数就是该日期下不同Groups的数量
两种方法最终都会输出你想要的结果:
Date Groups_counts 0 2017-1-1 1 1 2017-1-2 2 2 2017-1-3 1
内容的提问来源于stack exchange,提问作者ah bon
相关产品推荐
相关产品推荐

