Python 基于另一列计算行之间的差值
我想使用python/pandas基于某个列计算行之间的差异。我想我可以用小例子更好地解释。因此,我有以下数据:Python 基于另一列计算行之间的差值,python,pandas,numpy,Python,Pandas,Numpy,我想使用python/pandas基于某个列计算行之间的差异。我想我可以用小例子更好地解释。因此,我有以下数据: Number of rows A B 1 4 NaN 2 2 NaN 3 2 1 4 3 N
Number of rows A B
1 4 NaN
2 2 NaN
3 2 1
4 3 NaN
5 2 NaN
Number of rows A B C
3 2 1 2
我想得到以下数据:
Number of rows A B
1 4 NaN
2 2 NaN
3 2 1
4 3 NaN
5 2 NaN
Number of rows A B C
3 2 1 2
那么,让我来解释一下我在这里做了什么。首先,我需要识别列B的行,它的值为1(正如您可以看到第3行的值为1)。然后,我需要找到这一行之前和之后的两行(第3行)之间的差异,并将结果显示为C列。在我们的示例中,第3行之前的两行是第1行,第3行之后的两行是第5行。列A的第1行和第5行的值之间的差值是2(4-2=2)(最后,我将保留C列中的行只有值-这是一项简单的任务,我不需要任何帮助)。
我希望我能解释一下。
提前感谢你的帮助 一种解决方案是获取索引并使用
i-2
和i+2
i = df.loc[df.B.eq(1)].index.tolist()
j = [(i_-2,i_+2) for i_ in i ]
df.loc[df.B.eq(1), 'C'] = [df.A.iloc[a] - df.A.iloc[b] for (a,b) in j]
n A B C
0 1 4 NaN NaN
1 2 2 NaN NaN
2 3 2 1.0 2.0
3 4 3 NaN NaN
4 5 2 NaN NaN
或者,课程可以在b=1
中再次切片,以获得预期的输出
df[df.B.eq(1)]
n A B C
2 3 2 1.0 2.0
拉斐尔,再次感谢你的解决。我们如何修改它以无条件使用。我的意思是假设我们没有列B。只需要找到所有行之前和之后两行之间的差异。再次感谢。@Khalid但您希望输出结果如何?因为这将产生一个全新的行,如果我理解正确的话,问题是,我确实有1000多行。因此,在这种情况下,我将有一个列名C。该列中的每一行(让sat第31行)将等于该行之前的两行(第29行)和之后的两行(第33行)之间的差值。@khalid但两行之间的差值将产生一个新行。例如,如果第29行有
(2,3,10,9)
,第31行有(1,1,8,2)
,则结果将是(1,2,2,7)
。如何将(1,2,2,7)
放入C列的单元格中?每行中我只有一个值。例如,我在第29行有12个,在第33行有3个。然后,第31行C列中的单元格将为9。这与主要问题的唯一区别是,我现在没有条件。我的意思是我没有列名B。