我有一长列数据,我想按组组织。
np.random.seed(0)
data = {'unit':['a']*5+['b']*5,\
'day':list(range(5))+list(range(5)),\
'data':np.random.random(10)*10}
df = pd.DataFrame.from_dict(data)
数据框如下所示:
unit day data
0 a 0 5.488135
1 a 1 7.151894
2 a 2 6.027634
3 a 3 5.448832
4 a 4 4.236548
5 b 0 6.458941
6 b 1 4.375872
7 b 2 8.917730
8 b 3 9.636628
9 b 4 3.834415
我想按天将它整理成桌子:
day data a data b
0 0 5.488135 6.458941
1 1 7.151894 4.375872
2 2 6.027634 8.917730
3 3 5.448832 9.636628
4 4 4.236548 3.834415
目标是便于按日绘制“数据a”和“数据b”(pd.DataFrame.to_clipboard并粘贴到Excel中)。
答案 0 :(得分:0)
pivot
Pandas为此提供了一种方法:
res = df.pivot(index='day', columns='unit')
print(res)
data
unit a b
day
0 5.488135 6.458941
1 7.151894 4.375872
2 6.027634 8.917730
3 5.448832 9.636628
4 4.236548 3.834415
您需要为elevate your index to a series和flatten hierarchical columns做更多的工作,但是数据是按您希望的结构。
答案 1 :(得分:0)
使用数据透视表
df=df.pivot_table(index=['day'], columns='unit', values='data').reset_index().rename_axis(None, 1)
df.rename(columns={'a':'data a','b':'data b'})
df
day data a data b
0 0 5.488135 6.458941
1 1 7.151894 4.375872
2 2 6.027634 8.917730
3 3 5.448832 9.636628
4 4 4.236548 3.834415