首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas: Groupby Fillna不工作

Pandas: Groupby Fillna不工作
EN

Stack Overflow用户
提问于 2017-06-27 15:19:28
回答 1查看 1.2K关注 0票数 1

我有以下数据帧,它有大约4000个报价器,总共大约有200万行:

代码语言:javascript
复制
Ticker      Date              Rank         
  1         01/01/2000         5            
  1         01/02/2000        NaN             
  2         01/01/2000         4            
  2         01/02/2000         2            

我现在运行以下代码来继续Rank列,它工作得很好:

代码语言:javascript
复制
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")

然而,我现在想继续写一个不同的专栏。为了创建这个列,我执行以下操作:

代码语言:javascript
复制
  import numpy as np
  df["Code"]=np.NaN

在这个函数中,我写了一些代码,根据df "add“中的日期和滚动条值,大约200个值将被1替换。这段代码的工作方式如下所示:

代码语言:javascript
复制
df["Code"][(df.Date == add) & (df["Ticker"] == column)] = 1

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

代码语言:javascript
复制
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

现在,我想继续阅读这一列,但是代码永远需要花费时间。

代码语言:javascript
复制
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")

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

有人能帮上忙吗?

EN

回答 1

Stack Overflow用户

发布于 2017-06-27 15:24:58

我尝试使用sort=False to groupbyDataFrameGroupBy.ffill来改进您的代码

代码语言:javascript
复制
#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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44774376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档