Python 使用用户定义的函数对For循环进行矢量化
我有一个数据帧,为了简单起见,它看起来是这样的:Python 使用用户定义的函数对For循环进行矢量化,python,pandas,dataframe,for-loop,vectorization,Python,Pandas,Dataframe,For Loop,Vectorization,我有一个数据帧,为了简单起见,它看起来是这样的: import pandas as pd !pip install dfply from dfply import * stocks = {'Ticker': ['AA', 'AA', 'BB', 'BB'], 'Date': ['2019-01-01', '2019-01-03', '2012-01-01', '2012-01-03']} stocks = pd.DataFrame.from_dict(stocks)) print(stock
import pandas as pd
!pip install dfply
from dfply import *
stocks = {'Ticker': ['AA', 'AA', 'BB', 'BB'], 'Date': ['2019-01-01', '2019-01-03', '2012-01-01', '2012-01-03']}
stocks = pd.DataFrame.from_dict(stocks))
print(stocks)
Ticker Date
AA 2019-01-01
AA 2019-01-03
BB 2012-01-01
BB 2012-01-03
我遇到的一个问题是,我创建的数据集有一些股票在不同的日期上市,因此我尝试创建一列,指定股票代码出现的第一个日期。为此,我使用以下for循环:
def beginDate(stock): #returns the first day that stock is on market in dataset
return(min(
(stocks >> mask(stocks['Ticker'] == stock))['Date']
))
begin_market = []
for i in range(len(stocks)):
beginning_date = beginDate(stocks['Ticker'][i])
begin_market.append(begin_market)
我的目标是获得如下结果:
Ticker Date begin_market
AA 2019-01-01 2019-01-01
AA 2019-01-03 2019-01-01
BB 2012-01-01 2012-01-01
BB 2012-01-03 2012-01-01
我遇到的问题是,我有一个大的数据帧,因此for循环要花很长时间才能完成。为了提高计算速度,我正在阅读关于对for循环进行矢量化的文章,但是除了if/else类型的语句外,我还不清楚它到底是如何工作的。有人知道你如何将其矢量化以提高其速度吗?如果是这样,我将不胜感激 如果我没弄错,您希望按“股票代码”分组,然后从该组中选择最早日期:
stocks = {'Ticker': ['AA', 'AA', 'BB', 'BB'], 'Date': ['2019-01-01', '2019-01-03', '2012-01-01', '2012-01-03']}
stocks = pd.DataFrame.from_dict(stocks)
stocks['Date'] = pd.to_datetime(stocks['Date'])
stocks['First Appearance'] = stocks.groupby('Ticker')['Date'].transform('min')
print(stocks)
印刷品:
Ticker Date First Appearance
0 AA 2019-01-01 2019-01-01
1 AA 2019-01-03 2019-01-01
2 BB 2012-01-01 2012-01-01
3 BB 2012-01-03 2012-01-01
什么是
掩码()
?你能编辑你的问题并把预期的结果放在那里吗?很抱歉mask()
来自dfply包,该包基于R中的dplyr包(我以前使用过)。它允许使用>>进行管道连接,并使用mask()
进行过滤。我更新了开始代码以显示所需的包。所以您想按股票代码分组并从该组中选择最小日期吗?