我有一个这样的数据框,
ID total_sec is_weekday
1 300 1
1 200 0
2 280 1
2 260 0
3 190 1
4 290 0
5 500 1
5 520 0
我想找到工作日和周末之间差异最大的ID。如果我们错过了工作日或周末的记录,则将方差计算为0。 我的预期输出将是
ID variance
1 100
2 20
3 0
4 0
5 20
答案 0 :(得分:4)
您可以这样做:
df.pivot(index="ID", columns="is_weekday", values="total_sec").diff(axis=1)[1].fillna(0)
输出:
ID
1 100.0
2 20.0
3 0.0
4 0.0
5 -20.0
Name: 1, dtype: float64
答案 1 :(得分:0)
只要可以保证每个ID包含1-2行,并且每行具有不同的'is_weekday'
值,那么您实际上只需要“峰峰值”(ptp
)值。如果不是,请找出如何解决['ID', 'is_weekday']
上的重复项,然后使用ptp
。
import numpy as np
df.groupby('ID').total_sec.agg(np.ptp)
ID
1 100
2 20
3 0
4 0
5 20
Name: total_sec, dtype: int64