作者jasonhsu14 (14號星期五的傑森)
看板Python
標題[問題] df.apply是否有辦法取得前一列的資料
時間Sun Nov 15 21:20:22 2020
大家好
小弟在學習dataframe路上,碰到的案例中
會有需要df然後row by row的執行計算的情況
甚至會需要前一列計算出來的結果
先附上範例
import pandas as pd
df=pd.DataFrame(data=[[1, 7], [3, 6], [5, 4]], columns=['A', 'B'])
def d(row):
if row['A'] > row['B']:
return pd.Series((1, row['A']+row['B']))
else:
return pd.Series((0, row['A']-row['B']))
df[['C', 'D']]=df.apply(d, axis=1)
上述我會得到一個
index | A | B | C | D
-----------------------------------------
0 | 1 | 7 | 0 | -6
-----------------------------------------
1 | 3 | 9 | 0 | -3
-----------------------------------------
2 | 5 | 4 | 1 | 9
-----------------------------------------
像這樣的df
但因為我不知如何寫,我希望的是在d這個函式中
若A>B的話,我希望D除了A+B之外,還可以加上前一列的D的數值
以本例為例,我希望式可以在index=2的D欄位中得到6 (即 6 -3)
那我有想過使用for loop的方式,這個問題可以得到解決
可是在我認知中df越大時,用for loop會跑得比單純用apply搭配一個函式還慢
或是我對這方面的認知有誤,若有誤還有待指教
所以在此認知與考量時間下,決定使用apply的方式去計算
但不知道能否用.apply去解決取前一列的值的問題
或是前輩們能否有更好的解決我這個問題的方式,還盼望能提出指點
先謝謝各位願意花時間了解我的問題
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.135.101.201 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1605446424.A.126.html
推 TuCH: 先創一個欄位把前一列的值存下來 11/15 23:14
推 seefish: 我用SQL的window function去思考,rolling 看似可以處理 11/15 23:21
→ seefish: 你的需求,搜尋 dataframe window function 可以找到相關 11/15 23:21
→ seefish: 概念 11/15 23:21
推 gene50814: np.select 了解一下 11/18 07:55