如何在含非数值列的Pandas DataFrame中按逻辑执行行减法?
解决Pandas DataFrame按指定逻辑行减法的问题
单组行计算(第一行减第二行)
如果只需要计算第一行和第二行的Qtd列差值,直接定位行索引取值相减即可,完全不影响其他非数值列:
# 假设你的DataFrame名为df result = df.loc[0, 'Qtd'] - df.loc[1, 'Qtd']
所有相邻行批量计算(前一行Qtd减后一行Qtd)
如果要给每一行生成对应的差值(最后一行因无后续行结果为NaN),单独对Qtd列处理后合并回原DataFrame:
# 新增差值列,当前行Qtd减去下一行Qtd df['Qtd_diff'] = df['Qtd'] - df['Qtd'].shift(-1)
这种方式仅处理数值型的Qtd列,其他非数值列不受任何影响,不会出现全表NaN的情况。
替代diff()的优化思路
你之前用的diff()默认是后行减前行,且会作用于全表,导致非数值列变为NaN、首行结果为NaN。如果一定要用diff(),可以单独针对Qtd列反向处理:
# diff()得到行i - 行i-1,取负后转为行i-1 - 行i,再shift(-1)对齐位置 df['Qtd_diff'] = -df['Qtd'].diff().shift(-1)
不过这种方法不如直接用shift(-1)直观,更推荐前面的批量计算方式。
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

