按Name与Year分组,用中位数转换Pandas DataFrame数据
按Name和Year分组计算Value的中位数
要实现你需要的聚合效果,直接使用Pandas的分组聚合功能即可,具体代码如下:
import pandas as pd # 加载原始数据(如果是从CSV文件读取) df = pd.read_csv("your_input_data.csv") # 核心操作:按Name和Year分组,计算Value的中位数 aggregated_df = df.groupby(["Name", "Year"], as_index=False)["Value"].median() # 输出符合格式要求的结果 print(aggregated_df.to_csv(index=False, sep=","))
关键说明
groupby(["Name", "Year"]):将数据按Name和Year的唯一组合分组,保证每个品牌每年的数据单独计算中位数as_index=False:让分组后的Name和Year保持为普通列,而非索引,和你期望的输出结构完全匹配median():自动处理奇偶样本量的中位数计算逻辑:- 当组内样本数为偶数时,取中间两个数的平均值(比如Wendys 2021年的(6915+6916)/2=6915.5)
- 当组内样本数为奇数时,取中间位置的数值(比如Wendys 2023年的中位数是7129)
输出结果
运行代码后会得到你需要的格式:
Name,Year,Value Wendys,2021,6915.5 Wendys,2022,6979.5 Wendys,2023,7129.0 Wendys,2024,7166.0 White Castle,1950,89.0 White Castle,1951,92.0
如果希望将整数形式的中位数显示为整数(如7129而非7129.0),可以添加一行类型转换代码:
aggregated_df["Value"] = aggregated_df["Value"].where( aggregated_df["Value"] % 1 != 0, aggregated_df["Value"].astype(int) )
内容的提问来源于stack exchange,提问作者ishandutta2007
相关产品推荐
相关产品推荐

