Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 重新采样并排除某些字段_Python_Pandas_Dataset - Fatal编程技术网

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有一个条目,看起来是这样的。啊,好的。我明白了