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()
进行过滤。我更新了开始代码以显示所需的包。所以您想按股票代码分组并从该组中选择最小日期吗?