首页 > 解决方案 > 如何在多折线图中将空值行添加到熊猫数据框中以丢失年份

问题描述

我正在从包含六个国家/地区的一系列年度值的数据框中构建图表。该表由 SQL 查询创建,然后使用 read_sql 命令传递给 pandas...

    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) 行。

最后,我希望所有六个国家/地区的 pandas 数据框如下所示......

    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 行?

标签: pythonpandaschart.js

解决方案


使用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

推荐阅读