如何将空值行添加到pandas数据帧中,以查找多行图表中缺失的年份



我正在根据一个数据框架构建一个图表,其中包含六个国家的一系列年度值。此表由SQL查询创建,然后使用read_SQL命令传递给panda。。。

country date    value
0     CA    2000    123
1     CA    2001    125
2     US        1999    223
3     US        2000    235
4     US        2001    344
5     US        2002    355
...

不幸的是,并非每个国家的年份都有一个值,尽管如此,图表工具要求每个国家在数据框架中的年份数相同。没有值的年份需要添加一个Nan(null(行。

最后,我希望所有六个国家的熊猫数据帧如下。。。。

country date    value
0    CA     1999    Nan
1     CA    2000    123
2     CA    2001    125
3    CA     2002    Nan
4     US        1999    223
5     US        2000    235
6     US        2001    344
7     US        2002    355
8    DE     1999    Nan
9    DE     2000    Nan
10  DE     2001    423
11  DE     2002    326
...

是否有任何工具或快捷方式可以确定最小-最大日期,然后确保在需要时创建新的nan行?

使用Series.unstackDataFrame.stack技巧:

df = df.set_index(['country','date']).unstack().stack(dropna=False).reset_index()
print (df)
country  date  value
0      CA  1999    NaN
1      CA  2000  123.0
2      CA  2001  125.0
3      CA  2002    NaN
4      US  1999  223.0
5      US  2000  235.0
6      US  2001  344.0
7      US  2002  355.0

DataFrame.reindex的另一个想法:

mux = pd.MultiIndex.from_product([df['country'].unique(), 
range(df['date'].min(), df['date'].max() + 1)], 
names=['country','date'])
df = df.set_index(['country','date']).reindex(mux).reset_index()
print (df)
country  date  value
0      CA  1999    NaN
1      CA  2000  123.0
2      CA  2001  125.0
3      CA  2002    NaN
4      US  1999  223.0
5      US  2000  235.0
6      US  2001  344.0
7      US  2002  355.0

最新更新