2016-12-05 32 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