gpt4 book ai didi

python - 迭代 2 个变量来创建一个标志

转载 作者:行者123 更新时间:2023-12-01 09:20:47 25 4
gpt4 key购买 nike

我有一个大致如下所示的 df:

Year ID Loc
2014 56 01x
2015 56 01x
2016 56 07b
2014 23 04k
2016 23 75b
2017 56 75q
2015 23 04k
2016 12 23q
2014 12 23q
2015 12 23q

我正在尝试为 Loc 更改创建一个标志。因此,对于每个 ID,如果 Loc 与前一年相同,则 flag = 0,否则 flag = 1

预期输出:

Year ID Loc Loc_change
2014 56 01x Null
2015 56 01x 0
2016 56 07b 1
2014 23 04k Null
2016 23 75b 1
2017 56 75q 1
2015 23 04k 0
2016 12 23q 0
2014 12 23q Null
2015 12 23q 0

是否可以在不从长 df 变为宽 df 的情况下做到这一点?如果是这样,怎么办?

最佳答案

您可以使用shift进行比较。首先,您需要对 DataFrame 进行排序,然后 shift 将允许您确定 IDLoc > 与去年相同,不需要 groupby

import pandas as pd
import numpy as np
df = df.sort_values(['ID', 'Year'])

df['Loc_change'] = (~((df.ID == df.ID.shift(1)) & (df.Loc == df.Loc.shift(1)))).astype('int')

# Fix and replace the earliest year with `NaN`
df.loc[df['ID'] != df['ID'].shift(1), 'Loc_change'] = np.NaN

df 现在是

   Year  ID  Loc  Loc_change
8 2014 12 23q NaN
9 2015 12 23q 0.0
7 2016 12 23q 0.0
3 2014 23 04k NaN
6 2015 23 04k 0.0
4 2016 23 75b 1.0
0 2014 56 01x NaN
1 2015 56 01x 0.0
2 2016 56 07b 1.0
5 2017 56 75q 1.0

关于python - 迭代 2 个变量来创建一个标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50804227/

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