python - 如何在多折线图中将空值行添加到熊猫数据框中以丢失年份
问题描述
我正在从包含六个国家/地区的一系列年度值的数据框中构建图表。该表由 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 行?
解决方案
使用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
推荐阅读
- c - 有没有办法在 C 语言中将字符串的长度应用于数组的大小?
- arrays - 使用 unix paste 命令并排打印数组元素?
- postgresql - Postgres 要求忘记密码 (MacOS)
- css - TailwindCSS / Prettier 在 @apply 中添加空间
- python - Kaggle Python 课程练习:字符串和字典 Q. no. 2
- c++ - 在并行代码中调试分段错误
- android-emulator - 如何通过 Bluestacks 上的“adb 备份/恢复”确认解锁?
- shiny - 在选择 Advanced checkboxInput 时禁用/启用 selectInput 和 fileInput
- python - Python selenium 给了我一个空的文本字符串
- ruby-on-rails - Rails 6 API 仅不保存嵌套属性