Python Pandas按列唯一值分组求另一列最小值并计算差值的实现方法
最优实现方案
核心使用groupby配合transform方法完成,属于原生向量化操作,计算效率远高于循环、apply类实现:
import pandas as pd # 原始DataFrame df = pd.DataFrame({'Person': ['Alex', 'Alex', 'Alex', 'Eva', 'Eva', 'Eva'], 'Time': [30, 40, 60, 35, 55, 57]}) # 新增Difference列 df['Difference'] = df['Time'] - df.groupby('Person')['Time'].transform('min')
运行后得到的df和预期结果完全一致。
逻辑说明
df.groupby('Person')['Time']:按Person字段分组,提取每个分组的Time列transform('min'):对每个分组计算Time最小值,并且返回和原始DataFrame行数完全一致的序列,每个位置的值对应当前行所属人员的最低Time值- 直接用原始Time列减去上述最小值序列,即可得到每行的差值
内容的提问来源于stack exchange,提问作者karelkieslich
相关产品推荐
相关产品推荐

