首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一种快速的方法来比较一个Panda行中的值与前一行中的另一个值?

一种快速的方法来比较一个Panda行中的值与前一行中的另一个值?
EN

Stack Overflow用户
提问于 2016-07-13 04:15:24
回答 0查看 257关注 0票数 2

我有一个DataFrame,df,它看起来像:

代码语言:javascript
复制
ID    |          TERM       |   DISC_1
1     |         2003-10     |   ECON
1     |         2002-01     |   ECON
1     |         2002-10     |   ECON
2     |         2003-10     |   CHEM
2     |         2004-01     |   CHEM 
2     |         2004-10     |   ENGN
2     |         2005-01     |   ENGN
3     |         2001-01     |   HISTR
3     |         2002-10     |   HISTR 
3     |         2002-10     |   HISTR

ID是一个学生ID,term是一个学术术语,DISC_1是他们所在专业的学科。对于每个学生,我希望确定他们何时(以及是否)更改DISC_1的术语,然后创建一个报告何时更改的新DataFrame。零表示它们没有更改。输出如下所示:

代码语言:javascript
复制
ID    |     Change
1     |         0     
2     |         2004-01    
3     |         0    

我下面的代码可以工作,但它非常慢。我试着使用Groupby来做这件事,但是做不到。有人能解释一下我怎样才能更有效地完成这项任务吗?

代码语言:javascript
复制
df = df.sort_values(by = ['PIDM', 'TERM'])
c = 0
last_PIDM = 0
last_DISC_1 = 0
change = [ ]
for index, row in df.iterrows():
    c = c + 1
    if c > 1:
        row['change'] = np.where((row['PIDM'] == last_PIDM) & (row['DISC_1'] != last_DISC_1),     row['TERM'], 0)
        last_PIDM = row['PIDM']
        last_DISC_1 = row['DISC_1']

    else:
        row['change'] = 0
    change.append(row['change'])  

df['change'] = change        
change_terms = df.groupby('PIDM')['change'].max()
EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38338127

复制
相关文章

相似问题

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