如何使用Pandas计算分组后当前行VALUE与上一行的差值
Pandas:按NAME分组计算VALUE列的行间差值
嘿,这个需求用Pandas的分组和差值方法就能轻松搞定,我给你一步步演示怎么做:
完整实现代码
首先咱们先把数据初始化好,然后新增DIFF列:
import pandas as pd # 创建原始DataFrame data = [['AAA','2019-01-01', 10], ['AAA','2019-01-02', 21], ['AAA','2019-02-01', 30], ['AAA','2019-02-02', 45], ['BBB','2019-01-01', 50], ['BBB','2019-01-02', 60], ['BBB','2019-02-01', 70],['BBB','2019-02-02', 80]] dfx = pd.DataFrame(data, columns = ['NAME', 'TIMESTAMP','VALUE']) # 核心:按NAME分组后计算VALUE的行间差值 dfx['DIFF'] = dfx.groupby('NAME')['VALUE'].diff() # 可选:将NaN替换为空字符串,匹配你期望的输出格式 dfx['DIFF'] = dfx['DIFF'].fillna('') # 查看结果 print(dfx)
代码解释
- 分组操作:
dfx.groupby('NAME')['VALUE']先按NAME把数据分成AAA和BBB两个独立的组,只对每组内的VALUE列进行计算 - 行差计算:
.diff()方法会自动计算当前行和同组上一行的VALUE差值,每个分组的第一行因为没有前一行,所以返回NaN - 格式调整:用
fillna('')把NaN换成空字符串,就和你想要的输出完全一致了(如果不需要空字符串,直接保留NaN也可以)
最终输出
运行上面的代码后,得到的结果如下:
NAME TIMESTAMP VALUE DIFF 0 AAA 2019-01-01 10 1 AAA 2019-01-02 21 11 2 AAA 2019-02-01 30 9 3 AAA 2019-02-02 45 15 4 BBB 2019-01-01 50 5 BBB 2019-01-02 60 10 6 BBB 2019-02-01 70 10 7 BBB 2019-02-02 80 10
内容的提问来源于stack exchange,提问作者babsdoc
相关产品推荐
相关产品推荐

