通过ID和时间使用混合价值类型的熊猫表旋转



我有一个表(不是实际表(的表df,具有混合类型的值:

      ID    |        Time        |  Category  |  Value
ix   ----------------------------------------------------
0     457   |  2010-09-04 15:00  |  Name      | 'Foo'
1     542   |  2010-09-04 15:00  |  Name      | 'Bar'
2     542   |  2010-09-04 15:00  |  Sub       |  0.2
3     542   |  2010-09-04 15:00  |  Age       |  18
4     457   |  2010-09-04 15:40  |  Sub       |  0.7
5     457   |  2010-09-04 15:40  |  Age       |  20

现在,我想将此表转换为cat_df,以使每个类别都是其自己的列,并将其作为行作为行,首先由ID索引,然后是特定ID中的时间,以便:

      ID    |        Time        |  Name  |  Sub  | Age
ix   ----------------------------------------------------
0     457   |  2010-09-04 15:00  | 'Foo'  |  -    |  -
1     457   |  2010-09-04 15:40  |   -    |  0.7  | 20
2     542   |  2010-09-04 15:00  | 'Bar'  |  0.2  | 18

dash表示NA/NoneType。每当我使用具有ID和时间为索引的df.pivot时,我都会继续遇到重复错误。因此,我运行了以下代码:

mid_df = df.pivot(columns='Category', values='Value')

我得到下表的结果是mid_df

      Name    |   Sub    |  Age  
ix   ------------------------------ 
0     'Foo'   |    -     |  -
1     'Bar'   |    -     |  -
2       -     |    0.2   |  -
3       -     |    -     |  18
4       -     |    0.7   |  -
5       -     |    -     |  20

我想这很好吗?我可以通过在ix上加入ID和时间数据。但是我想在每个ID的时间之前将行组合在一起。要获取上面的最后一个表。

  • 那么,在牢记ID和时间时,如何将df直接转换为cat_df
  • 或如何将mid_df中的行组合在一起,以确保每个时间步骤的最小值?
  • 汇总:对于这两种方法,如果我想通过小时/数据汇总数据,我将如何处理混合数据类型的值?我想为数值平均而定,然后为分类
  • 选择最后一个
  • 此外,是否有办法确定汇总的时间段,以确保NA的?

for ID不会继续显示,您要将它们分类为两个组,然后我们需要创建一个键(通过使用cumsum(以帮助拆分,first将返回first不是每个列的空值

s=pd.concat([df[['ID','Time']],df.pivot(columns='Category', values='Value')],axis=1)
s.groupby([s.ID,s.ID.diff().ne(0).cumsum()]).first()
Out[540]: 
         ID             Time  Age   Name  Sub
ID  ID                                       
457 1   457  2010-09-0415:00  NaN  'Foo'  NaN
    3   457  2010-09-0415:40   20    NaN  0.7
542 2   542  2010-09-0415:00   18  'Bar'  0.2

相关内容

最新更新