分组具有相同日期的行Pandas df

8zzbczxx  于 2023-04-10  发布在  其他
关注(0)|答案(2)|浏览(148)

我有一个csv文件,其中包含来自多个传感器的数据,如下所示:

YY,   mm, dd, HH, MM,  sensor, sensorvalue
2018, 1,  1,  00, 00,  1,      0.2
2018, 1,  1,  00, 10,  1,      0
2018, 1,  1,  00, 20,  1,      0.1
2018, 1,  1,  00, 00,  2,      90.1
2018, 1,  1,  00, 10,  2,      90.3
2018, 1,  1,  00, 20,  2,      91.0
2018, 1,  1,  00, 00,  7,      1.5
2018, 1,  1,  00, 10,  7,      1.3
2018, 1,  1,  00, 20,  7,      0.7

我想在pandas df上转换它,每个传感器都有一列,datetime作为索引,像这样:

date,           sensor1value, sensor2value, sensor7value
2018-1-1 00:00, 0.2,          90.1,         1.5
2018-1-1 00:10, 0,            90.3,         1.3
2018-1-1 00:20, 0.1,          91.0,         0.7

在Pandas身上有简单的方法吗?

yrefmtwq

yrefmtwq1#

您可能希望使用pandas apply循环遍历行,创建一个datetime日期并将其设置为索引。类似于:

df.set_index(df.apply(lambda row: datetime(int(row["YY"]), int(row["mm"]), int(row["dd"]), int(row["HH"]), int(row["MM"])), axis=1)).loc[:, ["sensor1value", "sensor2value", "sensor7value"]]
z3yyvxxp

z3yyvxxp2#

感谢Gabriel的回答,lambda函数运行良好,但iloc部分并不是我需要做的,所以我使用每个传感器代码的名称和pivot表创建了一个解决方案:

estParams = {
    1: 'sensor1value',
    2: 'sensor2value',
    7: 'sensor7value'
}
    
date = df.apply(lambda row: datetime(int(row["YY"]), int(row["mm"]), int(row["dd"]), int(row["HH"]), int(row["MM"])), axis=1)
df.insert(0, 'Date', date)

df["sensor"].replace(estParams, inplace=True)
pivot = df.pivot_table('sensorvalue', ['Date'], 'sensor')

数据透视表:

sensor                sensor1value  sensor2value    sensor7value
Date            
2018-01-01 00:00:00   0.2              90.1          1.5
2018-01-01 00:10:00   0.0              90.3          1.3
2018-01-01 00:20:00   0.1              91.0          0.7

相关问题