【问题标题】:Fastest Possible python code that can replace this function可以替换此功能的最快可能的python代码
【发布时间】:2021-05-07 23:25:41
【问题描述】:

我正在尝试优化一个函数,以便它可以在更大的数据帧上工作。
我有一个看起来像这样的数据框(称为 test_data)

为了创建一个玩具示例,我像这样过滤了这个数据框:

value_list = ["DDD","MMM","AAPL","MSFT","AMZN","TSLA"]
test_data2 = test_data[test_data['Asset'].isin(value_list)]

我已经编写了一个基本函数来生成所需的输出:

def generate_stock_price_dataframe():
    price_dataframe = pd.DataFrame()
    for stock in test_data2['Asset'].unique():
        data = pd.DataFrame(index = test_data2.index.unique())
        data[stock] = pd.DataFrame(test_data2.query("Asset==@stock")['Price'])
        price_dataframe = pd.concat([price_dataframe,data],axis=1)

    stock_price_data  = price_dataframe
    return stock_price_data

这给出了所需的输出。

这对于只有少量资产的玩具示例非常有效。 但是,当我使用具有 1000 个资产的完整数据框运行它时……它就是行不通。

从哪里开始加快速度?

谢谢

编辑:这是一些重新创建问题的代码。

assets = ['AAPL','AAPL','AAPL','AAPL','AAPL','MSFT','MSFT','MSFT','MSFT','MSFT','AMZN','AMZN','AMZN','AMZN','AMZN',]
dates  = ['05/01/2021','05/02/2021','05/03/2021','05/04/2021','05/05/2021','05/01/2021','05/02/2021','05/03/2021','05/04/2021','05/05/2021','05/01/2021','05/02/2021','05/03/2021','05/04/2021','05/05/2021']
prices = range(1, 16)

test_data2 = pd.DataFrame(index=dates)
test_data2['Asset'] = assets
test_data2['Price'] = prices

df = generate_stock_price_dataframe()
df.tail()

【问题讨论】:

  • 如果我没听错的话,您要旋转表格吗?
  • 你能编辑你的问题并把示例(小)输入(文本形式)和示例输出放在那里吗?
  • 感谢您的关注。我添加了一些代码来帮助重新创建问题和所需的输出。只是想学习如何使该功能尽可能高效

标签: python pandas performance optimization


【解决方案1】:
df = test_data.pivot(columns='Asset')

输出

            Price
Asset       AAPL    AMZN    MSFT
05/01/2021  1       11      6
05/02/2021  2       12      7
05/03/2021  3       13      8
05/04/2021  4       14      9
05/05/2021  5       15      10

如果我们想从 Multilevel Columns 中删除 Price 和列轴名称 Asset

df = test_data.pivot(columns='Asset').droplevel(0,1).rename_axis(None, axis='columns')
df

输出

            AAPL    AMZN    MSFT
05/01/2021  1       11      6
05/02/2021  2       12      7
05/03/2021  3       13      8
05/04/2021  4       14      9
05/05/2021  5       15      10

【讨论】:

    猜你喜欢
    • 2022-10-14
    • 1970-01-01
    • 2014-01-23
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多