我有一个表(不是实际表(的表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