Python Pandas按月份分组计算分位数后拆分DataFrame的方法
拆分原DataFrame的具体步骤
嘿,作为Python和Pandas新手,你已经成功按月份算出了气温的中位数(0.5分位数),这一步做得很棒!接下来要把原DataFrame拆分成两个的话,咱们可以通过给原数据添加对应月份的中位数列,再用布尔索引筛选的方式来实现,具体操作如下:
1. 把计算好的分位数关联到原DataFrame里
你已经得到了每个月的中位数系列sQ,现在需要把这些值匹配到原数据的每一行中。最简单的方法是用map()函数,根据Month列的值去sQ里调取对应的中位数,添加成新列:
import pandas as pd # 读取原数据(你的原有代码) input_file = pd.read_csv("DailyMax_lat-14_lon35.csv") # 计算各月中位数(你的原有代码) sQ = input_file.groupby(['Month']).quantile(0.5)['TmaxScaled'] # 给原数据添加对应月份的中位数列 input_file['month_median'] = input_file['Month'].map(sQ)
2. 按中位数拆分出两个DataFrame
现在原数据里多了一列month_median,记录了每行数据对应月份的中位数,接下来就可以用布尔条件筛选出两个DataFrame了:
# 第一个DataFrame:气温值大于等于对应月份中位数的记录 df_above_equal_median = input_file[input_file['TmaxScaled'] >= input_file['month_median']] # 第二个DataFrame:气温值小于对应月份中位数的记录 df_below_median = input_file[input_file['TmaxScaled'] < input_file['month_median']]
验证拆分结果
你可以通过打印两个DataFrame的行数,或者随机查看几行数据来验证拆分是否正确:
print(f"原数据总行数:{len(input_file)}") print(f"中位数及以上的行数:{len(df_above_equal_median)}") print(f"中位数以下的行数:{len(df_below_median)}")
正常情况下,后两个数的和应该等于原数据的总行数哦。
内容的提问来源于stack exchange,提问作者Darkwilmore
相关产品推荐
相关产品推荐

