Python 重新采样并排除某些字段
伙计们, 我有这样一个数据集:Python 重新采样并排除某些字段,python,pandas,dataset,Python,Pandas,Dataset,伙计们, 我有这样一个数据集: index uid level sec Time 2019-12-16 01:38:30 257 Z8RsBpxhnkebK5fvahVCmfV7icO2 wake 30 2019-12-16 01:39:00 258 Z8RsBpxhnkebK5fvahVCmfV7icO2 light 5520 2019-12-1
index uid level sec
Time
2019-12-16 01:38:30 257 Z8RsBpxhnkebK5fvahVCmfV7icO2 wake 30
2019-12-16 01:39:00 258 Z8RsBpxhnkebK5fvahVCmfV7icO2 light 5520
2019-12-16 03:11:00 259 Z8RsBpxhnkebK5fvahVCmfV7icO2 rem 480
2019-12-16 03:19:00 260 Z8RsBpxhnkebK5fvahVCmfV7icO2 light 660
2019-12-16 03:19:00 260 HFxeriowjryghdsjuihdjsuiuiw3 light 660
我想在15分钟内对此数据集应用重采样。
我申请了
data =dataM.reset_index().set_index('time').resample('15min').mean()
我有这个输出:
index sec
time
2019-12-16 01:30:00 257.500000 2775.0
2019-12-16 01:45:00 NaN NaN
2019-12-16 02:00:00 NaN NaN
2019-12-16 02:15:00 NaN NaN
2019-12-16 02:30:00 NaN NaN
2019-12-16 02:45:00 NaN NaN
2019-12-16 03:00:00 259.000000 480.0
2019-12-16 03:30:00 260.000000 1300.0
我的问题是我想保留一些我不想重新采样的字段:
我的输出应该是:
index uid sec
Time
2019-12-16 01:30:00 257 Z8RsBpxhnkebK5fvahVCmfV7icO2 2775
2019-12-16 03:00:00 259 Z8RsBpxhnkebK5fvahVCmfV7icO2 480
2019-12-16 03:15:00 260 Z8RsBpxhnkebK5fvahVCmfV7icO2 660
2019-12-16 03:15:00 260 HFxeriowjryghdsjuihdjsuiuiw3 660
2019-12-17 03:30:00 277.5 220
因为有些字段应该与初始数据集相同(因为ID不改变,索引也不改变)
在这种降级中,使用平均值或总和是否有用?
此数据是人的睡眠时间(给定ID)
我尝试了两个运算符,我认为在这种情况下,sum应该更好,因为使用means时我丢失了一些信息(我认为),而不是使用sum,我只保留数据,首先或之前
在本例中,1:38的总和(睡眠时间)是凌晨1:30的5550
平均每天早上1点30分的睡眠时间只有2775秒。
图表将有所不同
编辑:使用同一时间的不同iD,我不希望计算第二个iD的平均值,而是为不同iD计算两个不同的值。
我尝试在重采样时使用groupby函数,但我有一个奇怪的行为:
data =dataM.groupby('uid').resample('15min').mean().dropna()
这样,初始数据:
2019-12-17 02:04:30 273 Z8RsBpxhnkebK5fvahVCmfV7icO2 wake 30
2019-12-17 02:05:00 274 Z8RsBpxhnkebK5fvahVCmfV7icO2 light 5010
2019-12-17 03:28:30 275 Z8RsBpxhnkebK5fvahVCmfV7icO2 deep 270
2019-12-17 03:33:00 276 Z8RsBpxhnkebK5fvahVCmfV7icO2 light 30
2019-12-17 03:33:30 277 Z8RsBpxhnkebK5fvahVCmfV7icO2 deep 360
2019-12-17 03:39:30 278 Z8RsBpxhnkebK5fvahVCmfV7icO2 light 30
2019-12-17 03:40:00 279 Z8RsBpxhnkebK5fvahVCmfV7icO2 wake 450
2019-12-17 03:47:30 280 Z8RsBpxhnkebK5fvahVCmfV7icO2 light 5700
是正确的分组,但平均值非常奇怪,事实上,输出为:
2019-12-17 02:00:00 273.5 2520.0
2019-12-17 03:15:00 275.0 270.0
2019-12-17 03:30:00 277.5 217.5
2019-12-17 03:45:00 280.0 5700.0
对于02:00:00是正确的,但我真的不明白为什么要在03:15:00创造新的价值
因为对我来说,这些数据:
2019-12-17 03:28:30 275 Z8RsBpxhnkebK5fvahVCmfV7icO2 deep 270
2019-12-17 03:33:00 276 Z8RsBpxhnkebK5fvahVCmfV7icO2 light 30
2019-12-17 03:33:30 277 Z8RsBpxhnkebK5fvahVCmfV7icO2 deep 360
应该是:
index uid sec
Time
2019-12-16 01:30:00 257 Z8RsBpxhnkebK5fvahVCmfV7icO2 2775
2019-12-16 03:00:00 259 Z8RsBpxhnkebK5fvahVCmfV7icO2 480
2019-12-16 03:15:00 260 Z8RsBpxhnkebK5fvahVCmfV7icO2 660
2019-12-16 03:15:00 260 HFxeriowjryghdsjuihdjsuiuiw3 660
2019-12-17 03:30:00 277.5 220
因为这三个值非常接近3:30,而不是在3:15创建一个新值(因为3:30太远了)
谢谢,IIUC,我想这会有用的
data =df.set_index('Time').resample('15min').agg({'sec':'mean','index':'mean', 'uid':'first' }).dropna()
IIUC,我想这会管用的
data =df.set_index('Time').resample('15min').agg({'sec':'mean','index':'mean', 'uid':'first' }).dropna()
不,问题不是删除NaN值,而是保留一些数据,我不想应用平均值。如果您看到,在重新采样后,数据“uid”消失,因为使用该值我无法应用mean.updated,必须有更好的方法来执行此操作,但至少我可以这样做。如果相同的小时数和ID不同,我需要在之前使用groupby?我试过这样做:data=dataM.groupby('uid')。resample('15min')。agg({'sec':'mean','uid':'first'})。dropna()。但不应用正确的重新采样。你可以共享一些数据并希望输出更新问题吗?不,问题不是删除NaN值,而是保留一些数据,我不想应用mean。如果您看到,在重新采样后,数据“uid”消失,因为使用该值我无法应用mean.updated,必须有更好的方法来执行此操作,但至少我可以这样做。如果相同的小时数和ID不同,我需要在之前使用groupby?我试过这个:data=dataM.groupby('uid')。重采样('15min')。agg({'sec':'mean','uid':'first'})。dropna()但是,不要应用正确的重采样。您是否可以共享一些数据和所需的输出可能是更新问题?您正在创建15分钟的存储箱,因此从3:00到3:14:59没有条目,然后从下一个存储箱3:15:00到3:29:59有一个条目按原样显示。啊,好的。我知道了,你正在创建15分钟的垃圾箱,所以从3:00到3:14:59没有条目,然后从下一个垃圾箱3:15:00到3:29:59有一个条目,看起来是这样的。啊,好的。我明白了