我有一个dataframe
,并且我需要计算序列元素之间的平均值(time_ref
)
(表示按time_ref
列排序后,相同f_idx
中的元素之间)。
我想按f_idx
分组并打印结果
例如:
f_idx time_ref
0 f1 5
1 f2 7
2 f3 2
3 f2 4
4 f1 1
5 f1 9
6 f2 8
预期输出:
f_idx res_mean
0 f1 mean((5-1), (9-5))
1 f2 mean((7-4), (8-7))
2 f3 Nan (just one element, so there is not diff)
我该怎么做呢?
发布于 2020-04-06 17:36:44
发布于 2020-04-06 20:30:13
首先按两列对值进行排序,然后使用Series.diff
和mean
按lambda函数聚合
df1 = df.sort_values(['f_idx','time_ref'], ascending=[True,False])
df2 = (df1.groupby('f_idx')['time_ref'].agg(lambda x: x.diff(-1).mean())
.reset_index(name='res_mean'))
print (df2)
f_idx res_mean
0 f1 4.0
1 f2 2.0
2 f3 NaN
发布于 2020-04-06 17:35:34
您可以使用groupby
两次:
df = (df
.sort_values(['f_idx','time_ref'], ascending=[True,False])
.groupby('f_idx')
['time_ref']
.rolling(2) # Take every 2 items
.apply(lambda x: x.iloc[0] - x.iloc[1]) # Get the difference
.groupby('f_idx')
.mean() # Get the mean
.rename('res_mean')
.to_frame())
您想要的结果:
f_idx res_mean
f1 4.0
f2 2.0
f3 NaN
https://stackoverflow.com/questions/61056581
复制相似问题