首先,使用随机数据创建数据帧。 导入pandas as PD
import numpy as np
来自日期导入日期,时间增量
ab=pd.DataFrame (
ab [ ' subjectid ' ]=NP.random.randint (5,size=200 ) # random list of ' subjects ' from0to 4
ab [ ' day _ number ' ]=NP.random.randint (50,size=200 ) #random list of 'dates' from 0 to 50
ab [ ' real _ date ' ]=ab.day _ number.apply (lambdad : datetime (2018,1,1 ) time delta (days=d ) ) ) ) tosi
ab [ ' score1' ]=NP.random.randint (200,size=200 ) # meanttosimulateonemeasurementfromonesubject
ab [ ' score2' ]=NP.random.randint (400,size=200 ) # meanttosimulateasecondmeasurement
min_day=ab.real_date.min (
ab=ab.groupby(['subjectid ',' real _ date ' ].sum ) # becausesomesubjectshavemorethan1scoreeachday
打印(ab.head ) ) )
day_number score1 score2
subjectID real_date
0 2018-01-01 0 306 273
2018-01-04 3 32 60
2018-01-05 4 61 135
2018-01-08 21 477 393
2018-01-09 8 22 341
2018-01-10 9 137 30
2018-01-11 30 281 674
2018-01-14 13 183 396
2018-01-15 14 41 337
2018-01-16 15 83 50
然后,在没有数据的天数中输入第二天的数据。
^{pr2}$
4天的下一次重新采样(分组依据) RES=df.reset_index ) level='subjectid ' ).groupby ) ' subjectid ' ).resample ) ' 4d ' )
RES=RES.drop (columns=' subjectid ' ) )。
打印(RES.head ) )
day_number score1 score2
subjectID real_date
0 2018-01-01 0 306 273
2018-01-05 4 61 135
2018-01-09 8 22 341
2018-01-13 13 183 396
2018-01-17 18 91 46
2018-01-21 20 76 333
2018-01-25 48 131 212
2018-01-29 29 92 81
2018-02-02 32 172 55
2018-02-06 72 98 246
最后,如果在4天以上的周期内没有数据,则重新设置索引进行处理。 RES=RES.reset_index(real_date )、drop=True ) # the real _ datehasnomeaninganymore
RES [ ' real _ date ' ]=RES.day _ number.apply (lambdad 3360 min _ daytime delta (days=d ) ) goodreal_datebaser
RES=RES.drop (columns=' day _ number ' ) )。
RES=RES.set_index(real_date ),append=True ) ) )。
RES=RES.group by (level=[ ' subjectid ',' real _ date ' ].first ) # regroupsperiodswithnodataformorethan4days
打印(RES.head ) )
score1 score2
subjectID real_date
0 2018-01-01 306 273
2018-01-05 61 135
2018-01-09 22 341
2018-01-14 183 396
2018-01-19 91 46
2018-01-21 76 333
2018-01-30 92 81
2018-02-02 172 55
2018-02-10 40 218
2018-02-15 110 112
这有点复杂,但我认为这是最好的方法。 虽然不知道效率,但好像没那么差。 在