我有一个分组的数据框
id num week
101 23 7 3
8 1
9 2
102 34 8 4
9 1
10 2
...
我需要创建新列并拥有像这样的数据框
id num 7 8 9 10
101 23 3 1 2 0
102 34 0 4 1 2
...
如您所见,周列的值变为多列。
我也可能没有对输入数据框进行分组,或者使用reset_index
,如下所示:
id num week
101 23 7 3
101 23 8 1
101 23 9 2
102 34 8 4
102 34 9 1
102 34 10 2
...
但我不知道哪个更容易开始。
注意 id
和num
都是关键
答案 0 :(得分:4)
使用unstack()和fillna(0)没有NaN。
让我们加载数据:
id num week val
101 23 7 3
101 23 8 1
101 23 9 2
102 34 8 4
102 34 9 1
102 34 10 2
s = pd.read_clipboard(index_col=[0,1,2], squeeze=True)
注意我已将索引设置为id,num和week。如果您还没有,请使用set_index
。
现在我们可以取消堆栈:从索引(行)移动到列。默认情况下,它会在行中的最后一级执行,week
此处,但您可以使用level=-1
或level='week'
s.unstack().fillna(0)
请注意,正如@piRsquared指出的那样,您可以s.unstack(fill_value=0)
一次性完成。