gpt4 book ai didi

python - 将一个 Pandas 行中的值与前一行中的另一个值进行比较的快速方法?

转载 作者:行者123 更新时间:2023-11-28 21:09:26 24 4
gpt4 key购买 nike

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

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是学号,TERM是学术术语,DISC_1是他们专业的学科。对于每个学生,我想确定他们何时(以及是否)更改 DISC_1 的 TERM,然后创建一个报告何时的新 DataFrame。零表示它们没有改变。输出如下:

ID    |     Change
1 | 0
2 | 2004-01
3 | 0

我下面的代码可以工作,但是速度很慢。我尝试使用 Groupby 执行此操作,但无法执行。有人可以解释我如何更有效地完成这项任务吗?

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()

最佳答案

这是一个开始:

df = df.sort_values(['ID', 'TERM'])
gb = df.groupby('ID').DISC_1
df['Change'] = df.TERM[gb.apply(lambda x: x != x.shift().bfill())]
df.Change = df.Change.fillna(0)

关于python - 将一个 Pandas 行中的值与前一行中的另一个值进行比较的快速方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38338127/

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