我正在根据一个数据框架构建一个图表,其中包含六个国家的一系列年度值。此表由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.unstack
和DataFrame.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