我想通過使用 python/pandas 計(jì)算基于某些列的行之間的差異。我想我可以通過使用小例子來更好地解釋。所以,我有以下數(shù)據(jù): Number of rows A B 1 4 NaN 2 2 NaN 3 2 1 4 3 NaN 5 2 NaN我想獲得以下數(shù)據(jù): Number of rows A B C 3 2 1 2所以,讓我解釋一下我在這里做了什么。首先,我需要標(biāo)識列B的行,該行的值為1(可以看到,行號3的行值為1)。然后,我需要找到該行(第 3 行)之前和之后的 2 行之間的差異,并將結(jié)果顯示為 C 列。在我們的示例中,第 3 行之前的 2 行是第 1 行,之后是 2 行第 3 行是第 5 行。列 A 的第 1 行和第 5 行的值之間的差值為 2 (4-2 = 2)(最后,我將保留行僅在列中具有值C - 這是一項(xiàng)簡單的任務(wù),我不需要任何幫助)。我希望我能解釋一下。在此先感謝您的幫助。
1 回答

尚方寶劍之說
TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊
一種解決方案是獲取索引并使用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
或者當(dāng)然可以再次切入以b=1達(dá)到預(yù)期的輸出
df[df.B.eq(1)]
n A B C
2 3 2 1.0 2.0
添加回答
舉報(bào)
0/150
提交
取消