当一列中的值更改为 'ID' 列中的值时,创建一个新的 'Change' 列

Make a new 'Change' column when a value in one column changes wrt to values in 'ID' column

我需要创建一个新列 'Change',当 'Feature' 列中的值针对 'ID' 列中的特定值更改时更新。 我拥有的数据框:

ID Feature 
1  0
1  0 
1  1
1  1
2  0
2  0
2  1
2  2

我想要的结果数据框:

ID Feature Change
1  0       no_change
1  0       no_change
1  1       change
1  1       no_change
2  0       no_change
2  0       no_change
2  1       change
2  2       change

提前致谢。

将移位值与掩码的每组回填缺失值进行比较并传递给numpy.where:

mask = df.groupby('ID')['Feature'].apply(lambda x: x.shift().bfill()).eq(df['Feature'])
df['Change'] = np.where(mask, 'no_change', 'change')
print (df)
   ID  Feature     Change
0   1        0  no_change
1   1        0  no_change
2   1        1     change
3   1        1  no_change
4   2        0  no_change
5   2        0  no_change
6   2        1     change
7   2        2     change

您可以在 ID 列上使用分组,并使用 groupby.diff() 获取与上一行的差异,用 0 填充空值,并分配不在行中的行等于 0 为 change,其余为 no_change

df['Change']  = np.where(df.groupby("ID")['Feature'].diff().fillna(0).ne(0),
                         "change","no_change")

print(df)

   ID  Feature     Change
0   1        0  no_change
1   1        0  no_change
2   1        1     change
3   1        1  no_change
4   2        0  no_change
5   2        0  no_change
6   2        1     change
7   2        2     change