作者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://webptt.com/cn.aspx?n=bbs/Python/M.1605446424.A.126.html
1F:推 TuCH: 先创一个栏位把前一列的值存下来 11/15 23:14
2F:推 seefish: 我用SQL的window function去思考,rolling 看似可以处理 11/15 23:21
3F:→ seefish: 你的需求,搜寻 dataframe window function 可以找到相关 11/15 23:21
4F:→ seefish: 概念 11/15 23:21
5F:推 gene50814: np.select 了解一下 11/18 07:55