多DataFrame补全所有年份索引并填充缺失count值为0
解决方案:补全DataFrame的年份索引并填充缺失值
嘿,这事儿好办!我们只需要两步就能搞定:先收集所有出现过的年份,再让每个DataFrame根据这个完整的年份列表重新索引,缺失的count值自动填0。
步骤1:收集所有唯一的年份
首先,我们把三个DataFrame的索引(也就是year)合并起来,去重后得到所有需要覆盖的年份,还可以给它们排个序看起来更整齐。
步骤2:重新索引每个DataFrame并填充0
用Pandas的reindex()方法,给每个DataFrame传入完整的年份列表,同时指定fill_value=0,这样缺失的年份对应的count就会自动补0啦。
下面是完整的代码示例:
import pandas as pd # 定义三个原始DataFrame df1 = {'year': ['2010','2012','2014','2015'], 'count': [1,1,1,1]} df1 = pd.DataFrame(data=df1).set_index('year') df2 = {'year': ['2010','2011','2016','2017'], 'count': [2,1,3,1]} df2 = pd.DataFrame(data=df2).set_index('year') df3 = {'year': ['2010','2011','2012','2013','2014','2015','2017'], 'count': [4,2,5,4,4,1,1]} df3 = pd.DataFrame(data=df3).set_index('year') # 收集所有唯一的年份并排序 all_years = sorted(set(df1.index) | set(df2.index) | set(df3.index)) # 对每个DataFrame重新索引并填充0 df1_complete = df1.reindex(all_years, fill_value=0) df2_complete = df2.reindex(all_years, fill_value=0) df3_complete = df3.reindex(all_years, fill_value=0) # 查看结果 print("补全后的df1:") print(df1_complete) print("\n补全后的df2:") print(df2_complete) print("\n补全后的df3:") print(df3_complete)
运行这段代码后,你会得到每个DataFrame都包含了所有年份(2010、2011、2012、2013、2014、2015、2016、2017),缺失的count值都被填充为0,完全符合你的需求~
内容的提问来源于stack exchange,提问作者el323
相关产品推荐
相关产品推荐

