如何在Python/Pandas中按列匹配条件计算行间Volume差值
按分组计算DataFrame中交易量的差值
要实现仅对Name列匹配的行计算Volume列的差值,核心思路是先按Name分组,再在组内计算差值,具体步骤如下:
1. 构造输入DataFrame
import pandas as pd data = { 'Date': ['2011-01-03'] * 9, 'Name': ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'], 'Volume': [10, 20, 30, 40, 30, 100, 140, 50, 120] } df = pd.DataFrame(data, index=range(1, 10))
2. 分组计算差值
通过groupby锁定相同Name的行,用diff()计算组内差值,再将每组第一行的缺失值替换为该行的Volume值:
# 计算组内差值并填充缺失值 df['Volume Diff'] = df.groupby('Name')['Volume'].diff().fillna(df['Volume']) # 转为整数类型(匹配示例输出格式) df['Volume Diff'] = df['Volume Diff'].astype(int)
3. 最终输出
运行后得到的DataFrame如下:
Date Name Volume Volume Diff 1 2011-01-03 A 10 10 2 2011-01-03 B 20 20 3 2011-01-03 C 30 30 4 2011-01-03 A 40 30 5 2011-01-03 B 30 10 6 2011-01-03 C 100 70 7 2011-01-03 A 140 100 8 2011-01-03 B 50 20 9 2011-01-03 C 120 20
关键逻辑说明
groupby('Name'):确保差值计算仅在相同名称的行组内进行,不会跨名称计算diff():计算当前行与组内上一行的Volume差值,每组第一行因无前置行返回NaNfillna(df['Volume']):将每组第一行的缺失值替换为该行自身的Volume,符合示例结果要求
内容的提问来源于stack exchange,提问作者BeingSuman
相关产品推荐
相关产品推荐

