当一列中的值将wrt更改为“ID”列中的值时,创建新的“更改”列

2024-05-08 14:33:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要创建一个新列“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

提前谢谢


2条回答

为掩码和传递给^{}的每个组比较移位值和回补缺失值:

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列上的group,并使用^{}获取与前一行的差异,用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

相关问题 更多 >

    热门问题