Python 添加一个标志,指示中每个组的列都已更改

Python 添加一个标志,指示中每个组的列都已更改,python,pandas,Python,Pandas,我有一个数据框,它有一个id为的公司名称,如下所示 将熊猫作为pd导入 df=pd.DataFrame({ “id”:[1,1,1,2,2,3,3], “公司”:[“A”、“A”、“B”、“C”、“C”、“C”、“D”、“E”、“F”], 列=[“id”,“公司”] ) 身份证公司 01 A 11A 21 B 3.2 C 4.2 C 5.2 C 6三维 7.3 E 8.3楼 如何将指示作业更改的标志添加到上述数据框中,如下所示 id公司职务变更 0 1 A 0 11A0 2 1 B 1 32

我有一个数据框,它有一个id为的公司名称,如下所示

将熊猫作为pd导入
df=pd.DataFrame({
“id”:[1,1,1,2,2,3,3],
“公司”:[“A”、“A”、“B”、“C”、“C”、“C”、“D”、“E”、“F”],
列=[“id”,“公司”]
)
身份证公司
01 A
11A
21 B
3.2 C
4.2 C
5.2 C
6三维
7.3 E
8.3楼
如何将指示作业更改的标志添加到上述数据框中,如下所示

id公司职务变更
0 1 A 0
11A0
2 1 B 1
32 c0
42 c0
5 2 C 0
6D30
7 3 E 1
8 3 F 1

关于如何在stackoverflow中使用pandas在
groupby
中获取
diff
几乎没有解释。

您可以使用自定义函数,通过
bfill
向后填充将比较的ed组替换为NaNs,最后通过以下方式将布尔掩码转换为整数:

感谢您,@pansen提供更好的解决方案:

df['flag'] = df.groupby("id")["company"].shift().bfill().ne(df['company']).astype(int)
print (df)
   id company  flag
0   1       A     0
1   1       A     0
2   1       B     1
3   2       C     0
4   2       C     0
5   2       C     0
6   3       D     0
7   3       E     1
8   3       F     1

我认为您可以删除
apply
,这将使解决方案更快、更易于阅读,例如
df.groupby(“id”)[“company”].shift().bfill().ne(df[“company”]).astype(int)
df['flag'] = df.groupby("id")["company"].shift().bfill().ne(df['company']).astype(int)
print (df)
   id company  flag
0   1       A     0
1   1       A     0
2   1       B     1
3   2       C     0
4   2       C     0
5   2       C     0
6   3       D     0
7   3       E     1
8   3       F     1