我想通过使用 python/pandas 计算基于某些列的行之间的差异。我想我可以通过使用小例子来更好地解释。所以,我有以下数据: 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 行)之前和之后的 2 行之间的差异,并将结果显示为 C 列。在我们的示例中,第 3 行之前的 2 行是第 1 行,之后是 2 行第 3 行是第 5 行。列 A 的第 1 行和第 5 行的值之间的差值为 2 (4-2 = 2)(最后,我将保留行仅在列中具有值C - 这是一项简单的任务,我不需要任何帮助)。我希望我能解释一下。在此先感谢您的帮助。
1 回答
尚方宝剑之说
TA贡献1788条经验 获得超4个赞
一种解决方案是获取索引并使用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
添加回答
举报
0/150
提交
取消