2016-12-05 94 views
3
Input DF: 

ID Time Value 
0 1 5 
0 2 7 
0 3 8 
1 1 1 
1 2 4 
1 3 6 

Output DF: 
    1 2 3 
0 5 7 8 
1 1 4 6 

目標:我現在有類似於輸入DF東西,我期待將它轉變成輸出DF。總結,移調,並在熊貓數據幀中值拉

  • 輸出DF的第1行等於唯一時間數據點。
  • 輸出DF的第1列等於唯一ID。其餘
  • 中心點相等/給出的ID元素的值時

我已經得到最接近的是做這樣的事情:

group_by = input_df.groupby('ID').agg({'Value':np.mean}) 

或者:

group_by = input_df.groupby('time').agg({'Value':np.mean}) 

這會讓我聚集意味着由ID或時間捲起,但我無法弄清楚如何做到這一點,只是拉值。

回答

4

您可以使用透視:

df.pivot(index='ID', columns='Time', values='Value') 
Out: 
Time 1 2 3 
ID   
0  5 7 8 
1  1 4 6 

這假定時間/ ID對是唯一的。如果沒有,你可以替換成pivot_table,並添加適當的聚合函數:

df.pivot_table(index='ID', columns='Time', values='Value', aggfunc='first') 
Out: 
Time 1 2 3 
ID   
0  5 7 8 
1  1 4 6 

你的做法也將與拆散工作:

df.groupby(['ID', 'Time'])['Value'].agg('mean').unstack() 
Out: 
Time 1 2 3 
ID   
0  5 7 8 
1  1 4 6 
1
import pandas as pd 

df = pd.DataFrame([(0, 1, 5), (0, 2, 7), (0, 3, 8), (1, 1, 1), (1, 2, 4), (1, 3, 6)], columns=['ID', 'Time', 'Value']) 
df 

Out[5]: 
    ID Time Value 
0 0  1  5 
1 0  2  7 
2 0  3  8 
3 1  1  1 
4 1  2  4 
5 1  3  6 

df.pivot(index='ID', columns='Time', values='Value') 

Out[7]: 
Time 1 2 3 
ID   
0  5 7 8 
1  1 4 6