假设我有一个数据框,如下所示:
df = pd.DataFrame({"user":[11,11,11,21,21,21,21,21,32,32],
"event":[0,0,1,0,0,1,1,1,0,0],
"datetime":['05:29:54','05:32:04','05:32:08',
'15:35:26','15:36:07','15:36:16','15:36:50','15:36:54',
'09:29:12', '09:29:25'] })
我想处理第一列(用户)中的重复行以达到以下要求。
在这种情况下,我们将“事件”列替换为“用户”列中相关的最大值(例如,对于user = 11,事件的最大值为1)。第三列替换为日期时间的平均值。
P.S。已经讨论了删除重复行here的问题,但是,我不想盲目删除行。尤其是当我处理具有很多属性的数据框时。
答案 0 :(得分:3)
您要groupby
和aggregate
df.groupby('user').agg({'event': 'max',
'datetime': lambda s: pd.to_timedelta(s).mean()})
如果需要,也可以先使用datetime
将timedelta
列更改为pd.to_timedelta
,然后将mean
放入agg
>
您可以使用str
代表您的意图
df.groupby('user').agg({'event': 'max',
'datetime': lambda s: str(pd.to_timedelta(s).mean().to_pytimedelta())})
答案 1 :(得分:1)
您可以将datetime
转换为本地整数并聚合mean
,最后转换回来,对于HH:MM:SS
字符串,请使用strftime
:
df['datetime'] = pd.to_datetime(df['datetime']).astype(np.int64)
df1 = df.groupby('user', as_index=False).agg({'event':'max', 'datetime':'mean'})
df1['datetime'] = pd.to_datetime(df1['datetime']).dt.strftime('%H:%M:%S')
print (df1)
user event datetime
0 11 1 05:31:22
1 21 1 15:36:18
2 32 0 09:29:18