gpt4 book ai didi

python - 迭代 DataFrame 行以创建新列,同时引用其他行

转载 作者:太空宇宙 更新时间:2023-11-03 16:22:34 27 4
gpt4 key购买 nike

我正在使用一个大型数据框,其中包含股票的基本数据。下面是数据帧(数据)的头部和尾部的图像。它包含 2005 年至 2015 年每种证券和每年的数据。请注意“日历日期”列。

我的目标是转到每一行,获取“revenueusd”数据点,并将其除以前一年的“revenueusd”数据点,以获得每种证券的 1 年收入增长变化。使用股票代码和日历日期来定位第二个数据点。

我一直在尝试将 apply 函数与 lambda 一起使用,但它不起作用。下面是我一直在尝试的代码:

def conversion(tick, dates,dataframe):
date1 = datetime.datetime.strptime(dates, "%Y-%m-%d").date()
date2 = datetime.date(date1.year-1,date1.month,date1.day).strftime("%Y-%m-%d")
growth = dataframe[(dataframe['ticker']==tick)&(dataframe['calendardate']==dates)]['revenueusd']/dataframe[(dataframe['ticker']==tick)&(dataframe['calendardate']==date2)]['revenueusd']-1
return growth

data['1yrRevenueGrowth']=data.apply(lambda x: conversion(x['ticker'],x['calendardate'],data),axis=1)

我已经被这个问题困扰好几天了,并不懈地搜索论坛。任何帮助将不胜感激!

data.head(5)

data.tail(5)

,ticker,ticker.1,calendardate,revenueusd,gp,rnd  
0,A,A,2015-12-31,4038000000,2041000000,330000000
1,AA,AA,2015-12-31,22534000000,4465000000,238000000
2,AAL,AAL,2015-12-31,40990000000,23911000000,0
3,AAP,AAP,2015-12-31,9737018000,4422772000,0
4,AAPL,AAPL,2015-12-31,234988000000,94308000000,8576000000
5,ABBV,ABBV,2015-12-31,22859000000,18359000000,4435000000
509,A,A,2014-12-31,6981000000,3593000000,719000000
510,AA,AA,2014-12-31,23906000000,4769000000,218000000
511,AAPL,AAPL,2014-12-31,199800000000,78432000000,6606000000
512,ABBV,ABBV,2014-12-31,19960000000,15534000000,3649000000

最佳答案

有一个很好的函数叫做 Series.pct_change为了您的目的。例如,您可以这样做:

import pandas as pd
data = pd.read_csv("data.csv", index_col=0)
data.groupby("ticker").apply(lambda x : x.set_index("calendardate").sort_index()["revenueusd"].pct_change())

对于每个股票代码值,构建一个按日历日期排序的系列,然后应用函数 pct_change(默认情况下,此函数计算两个连续条目之间的比率)。

ticker  calendardate
A 2014-12-31 NaN
2015-12-31 -0.421573
AA 2014-12-31 NaN
2015-12-31 -0.057391
AAL 2015-12-31 NaN
AAP 2015-12-31 NaN
AAPL 2014-12-31 NaN
2015-12-31 0.176116
ABBV 2014-12-31 NaN
2015-12-31 0.145240
Name: revenueusd, dtype: float64

还有一件事,您的日期格式很好,因此您可以轻松地将列转换为日期时间类型,如下所示:

data["calendardate"] = pd.to_datetime(data["calendardate"], infer_datetime_format=True)

关于python - 迭代 DataFrame 行以创建新列,同时引用其他行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38284638/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com