[問題] df.apply是否有辦法取得前一列的資料

看板Python作者 (14號星期五的傑森)時間4年前 (2020/11/15 21:20), 編輯推噓3(302)
留言5則, 3人參與, 4年前最新討論串1/1
大家好 小弟在學習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

11/15 23:14, 4年前 , 1F
先創一個欄位把前一列的值存下來
11/15 23:14, 1F

11/15 23:21, 4年前 , 2F
我用SQL的window function去思考,rolling 看似可以處理
11/15 23:21, 2F

11/15 23:21, 4年前 , 3F
你的需求,搜尋 dataframe window function 可以找到相關
11/15 23:21, 3F

11/15 23:21, 4年前 , 4F
概念
11/15 23:21, 4F

11/18 07:55, 4年前 , 5F
np.select 了解一下
11/18 07:55, 5F
文章代碼(AID): #1ViIiO4c (Python)
文章代碼(AID): #1ViIiO4c (Python)