Python 数据帧中的聚合、转置和拉入值

Python 数据帧中的聚合、转置和拉入值,python,pandas,Python,Pandas,目标:我目前有一些类似于输入DF的东西,并希望将其转换为输出DF 输出DF的第1行等于唯一时间数据点 输出DF的第1列等于唯一ID。剩下的 中心点等于给定id/时间的值元素 我得到的最接近的结果是通过这样做: 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/时间的值元素
我得到的最接近的结果是通过这样做:

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 
或:

这将使我得到按ID或时间汇总的聚合平均值,但我不知道如何同时执行这两个操作,而只是提取值

您可以使用pivot:

group_by = input_df.groupby('time').agg({'Value':np.mean})
这假设时间/ID对是唯一的。如果没有,您可以将其替换为pivot_表,并添加合适的聚合函数:

df.pivot(index='ID', columns='Time', values='Value')
Out: 
Time  1  2  3
ID           
0     5  7  8
1     1  4  6
您的方法也适用于unstack:

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.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
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