看板 Python 關於我們 聯絡資訊
大家好 小弟在學習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