我的 df:import pandas as pdimport numpy as npdf = pd.DataFrame({'id':[1,1,1,2,2], 'time':['2020-01-01 12:00:15','2020-01-01 12:00:30','2020-01-01 12:00:45','2020-01-03 08:00:00','2020-01-03 08:00:15'], 'time1':['2020-01-01 12:00:00','2020-01-01 12:00:00','2020-01-01 12:00:00','2020-01-01 12:00:00','2020-01-01 12:00:00'], 'numb':[1,5,8,0,4]})df['time'] = pd.to_datetime(df['time'])df['time1'] = pd.to_datetime(df['time1'])df['numb_diff'] = df['numb'] - df['numb'].shift()输出: id time time1 numb numb_diff0 1 2020-01-01 12:00:15 2020-01-01 12:00:00 1 NaN1 1 2020-01-01 12:00:30 2020-01-01 12:00:00 5 4.02 1 2020-01-01 12:00:45 2020-01-01 12:00:00 8 3.03 2 2020-01-03 08:00:00 2020-01-01 12:00:00 0 -8.04 2 2020-01-03 08:00:15 2020-01-01 12:00:00 4 4.0现在我想设置为组( )time1的最低值,只要该位置的第一个条目<0。timeididnumb_diff预期输出: id time time1 numb numb_diff0 1 2020-01-01 12:00:15 2020-01-01 12:00:00 1 NaN1 1 2020-01-01 12:00:30 2020-01-01 12:00:00 5 4.02 1 2020-01-01 12:00:45 2020-01-01 12:00:00 8 3.03 2 2020-01-03 08:00:00 2020-01-03 08:00:00 0 -8.0 #Changing time1 to the min of time the group(id = 2)4 2 2020-01-03 08:00:15 2020-01-03 08:00:00 4 4.0
1 回答
慕姐4208626
TA贡献1852条经验 获得超7个赞
让我们创建一个表示条件的布尔掩码,其中num_diff小于零,然后对该掩码进行分组id并使用 进行转换first,最后使用此掩码的布尔索引来替换 中的值time1:
m = df['numb_diff'].lt(0).groupby(df['id']).transform('first')
df.loc[m, 'time1'] = df.groupby('id')['time'].transform('min')
id time time1 numb numb_diff
0 1 2020-01-01 12:00:15 2020-01-01 12:00:00 1 NaN
1 1 2020-01-01 12:00:30 2020-01-01 12:00:00 5 4.0
2 1 2020-01-01 12:00:45 2020-01-01 12:00:00 8 3.0
3 2 2020-01-03 08:00:00 2020-01-03 08:00:00 0 -8.0
4 2 2020-01-03 08:00:15 2020-01-03 08:00:00 4 4.0
添加回答
举报
0/150
提交
取消