[英]groupby with diff function
我有一個帶有差異 function 的 groupby,但是我想為心率添加一個額外的平均列,我該如何以最好的方式做到這一點?
這是代碼
data= pd.DataFrame(
[[Timestamp('2022-08-05 10:11:04'), 140, 120],
[Timestamp('2022-08-05 10:11:05'), 160, 155],
[Timestamp('2022-08-05 10:11:06'), 230, 156],
[Timestamp('2022-08-05 10:11:07'), 230, 155],
[Timestamp('2022-08-05 10:11:08'), 230, 160],
[Timestamp('2022-08-05 10:11:09'), 140, 130],
[Timestamp('2022-08-05 10:11:10'), 140, 131],
[Timestamp('2022-08-05 10:11:11'), 230, 170]],
columns=['timestamp', 'power', 'heart rate'])
m = data['power'].gt(200) #fill in power value
gb = (-data['timestamp'].diff(-1))[m].groupby([(~m).cumsum()).sum()
gb= gb.groupby((~m).cumsum()).sum()
gb
我應該在哪里添加代碼來計算平均心率?
output 將是高功率區域的秒數,然后我想添加此期間的平均心率。 像這樣
gb = pd.DataFrame(
[[Timestamp('00:00:04'), 210, 145],
[Timestamp('00:00:15'), 250, 155],
[Timestamp('00:01:00'), 230, 180],
columns=['time at high intensity', ' avg power', ' avg heart rate'])
您可以根據差異創建幫助列,然后通過它和GroupBy.agg
中命名聚合中的另一列進行聚合:
m = data['power'].gt(200) #fill in power value
gb = (data.assign(new=-data['timestamp'].diff(-1))[m]
.groupby((~m).cumsum())
.agg(time_at_high_intensity=('new','sum'),
avg_power=('power','mean'),
avg_heart_rate=('heart rate','mean')))
print (gb)
time_at_high_intensity avg_power avg_heart_rate
power
2 0 days 00:00:03 230 157
4 0 days 00:00:00 230 170
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.