gpt4 book ai didi

python - Pandas :Groupby Fillna 不工作

转载 作者:太空宇宙 更新时间:2023-11-03 15:04:31 25 4
gpt4 key购买 nike

我有以下数据框,其中约有 4000 个代码,总共约 200 万行:

Ticker      Date              Rank         
1 01/01/2000 5
1 01/02/2000 NaN
2 01/01/2000 4
2 01/02/2000 2

我现在运行以下代码来结转排名列,效果完全正常。:

import pandas as pd
df= df.sort_values(by=["Ticker", "Date"], ascending=[True,True])
df['Rank'] = df.groupby('Ticker')['Rank'].fillna(value=None, method="ffill")

但是,我现在想结转一个不同的专栏。为了创建此专栏,我执行以下操作:

  import numpy as np
df["Code"]=np.NaN

在此函数中,我编写了一些代码,根据 df“add”中的日期和股票代码值,大约 200 个值将替换为 1。此代码的工作原理如下:

df["Code"][(df.Date == add) & (df["Ticker"] == column)] = 1

这使我的数据框看起来像这样:

Ticker      Date              Rank          Code      
1 01/01/2000 5 NaN
1 01/02/2000 NaN NaN
2 01/01/2000 4 1
2 01/02/2000 2 NaN

现在,我想继续这个专栏,但是代码需要很长时间。

import pandas as pd
df= df.sort_values(by=["Ticker", "Date"], ascending=[True,True])
df['Code'] = df.groupby('Ticker')['Code'].fillna(value=None, method="ffill")

我运行了两天,我的电脑崩溃了。我做事的方式肯定有一些错误,因为上面的结转运行得太快了,而这个甚至还没有完成。我检查了“Code”的数据类型,它是float64。

有人可以帮忙吗?

最佳答案

我尝试使用 sort=False 将您的代码改进为 groupbyDataFrameGroupBy.ffill :

#convert column to datetime
df["Date"] = pd.to_datetime(df["Date"])
#ascending can be omit, because default value
df= df.sort_values(by=["Ticker", "Date"])

df['Rank'] = df.groupby('Ticker', sort=False)['Rank'].ffill()
add = '01/01/2000'
column = 2

df.loc[(df.Date == add) & (df["Ticker"] == column), "Code"] = 1

#sorting again is not necessary
df['Code'] = df.groupby('Ticker', sort=False)['Code'].ffill()
print (df)
Ticker Date Rank Code
0 1 2000-01-01 5.0 NaN
1 1 2000-01-02 5.0 NaN
2 2 2000-01-01 4.0 1.0
3 2 2000-01-02 2.0 1.0

关于python - Pandas :Groupby Fillna 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44774376/

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