当一列中的值更改为 '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
我需要创建一个新列 '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