Python 当一列中的值将wrt更改为“ID”列中的值时,创建新的“更改”列
我需要创建一个新列“Change”,当“Feature”列中的值更改为“ID”列中的特定值时,该列将更新。 我拥有的数据帧:Python 当一列中的值将wrt更改为“ID”列中的值时,创建新的“更改”列,python,pandas,data-analysis,Python,Pandas,Data Analysis,我需要创建一个新列“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
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
提前感谢。比较各组掩码的移位值和回补缺失值,并传递到:
比较移位值和回补缺失值,每组掩码和传递到: 您可以使用ID列上的group,并使用获取上一行的差异,用0填充空值,并将其中行不等于0的部分指定为change,将其余部分指定为NOU change 您可以使用ID列上的group,并使用获取上一行的差异,用0填充空值,并将其中行不等于0的部分指定为change,将其余部分指定为NOU change
那就行了。非常感谢@RavinderSingh13-超级,我真的很喜欢你们两种解决方案,这是超级!谢谢你为我们俩;那就行了。非常感谢@RavinderSingh13-超级,我真的很喜欢你们两种解决方案,这是超级!谢谢你为我们俩;
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
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