Python 熊猫:为列的每个唯一值创建行,即使缺少数据
注意:我的问题标题的措辞有困难,所以如果你能想出更好的方法来帮助其他有类似问题的人,请让我知道,我会更改它 当前数据 存储为数据帧Python 熊猫:为列的每个唯一值创建行,即使缺少数据,python,pandas,Python,Pandas,注意:我的问题标题的措辞有困难,所以如果你能想出更好的方法来帮助其他有类似问题的人,请让我知道,我会更改它 当前数据 存储为数据帧 print(df) week | site | vol 1 | a | 10 2 | a | 11 3 | a | 2 1 | b | 55 2 | b | 1 1 | c | 69 2 | c | 66 3 | c | 23 注意站点b没有第3周的数据 目标 基本上
print(df)
week | site | vol
1 | a | 10
2 | a | 11
3 | a | 2
1 | b | 55
2 | b | 1
1 | c | 69
2 | c | 66
3 | c | 23
注意站点b没有第3周的数据
目标
基本上,我想为
week
和site
的所有独特组合创建行。如果原始数据没有一个week站点的vol
组合,那么它将使用堆栈和取消堆栈
df.set_index(['week','site']).unstack('week',fill_value=0).stack().reset_index()
Out[424]:
site week vol
0 a 1 10
1 a 2 11
2 a 3 2
3 b 1 55
4 b 2 1
5 b 3 0
6 c 1 69
7 c 2 66
8 c 3 23
您可以使用交叉表
和堆栈
:
pd.crosstab(df.site,df.week,df.vol, aggfunc='first').fillna(0).stack().reset_index(name='vol')
输出:
site week vol
0 a 1 10.0
1 a 2 11.0
2 a 3 2.0
3 b 1 55.0
4 b 2 1.0
5 b 3 0.0
6 c 1 69.0
7 c 2 66.0
8 c 3 23.0
谢谢!我不知道这一系列方法是如何工作的,所以我有一些研究要做,但解决方案是有效的。@NLR Yw:-)快乐编码
site week vol
0 a 1 10.0
1 a 2 11.0
2 a 3 2.0
3 b 1 55.0
4 b 2 1.0
5 b 3 0.0
6 c 1 69.0
7 c 2 66.0
8 c 3 23.0