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

Kei*_*iku 4 python pandas

我有一个 DataFrame,其 id 的公司名称如下。

import pandas as pd

df = pd.DataFrame({
    "id": [1, 1, 1, 2, 2, 2, 3, 3, 3],
    "company": ["A", "A", "B", "C", "C", "C", "D", "E", "F"]},
    columns=["id", "company"]
)
   id company
0   1       A
1   1       A
2   1       B
3   2       C
4   2       C
5   2       C
6   3       D
7   3       E
8   3       F
Run Code Online (Sandbox Code Playgroud)

如何向上述 DataFrame 添加指示工作更改的标志,如下所示?

   id company  job_change
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
Run Code Online (Sandbox Code Playgroud)

stackoverflow 中几乎没有关于如何使用diffpandas的解释groupby

jez*_*ael 5

您可以使用自定义函数来比较ed 组,并通过向后填充来shift替换s ,最后将布尔掩码转换为整数:NaNbfillastype

df['flag'] = df.groupby('id')['company'].apply(lambda x :x.ne(x.shift().bfill())).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
Run Code Online (Sandbox Code Playgroud)

谢谢@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
Run Code Online (Sandbox Code Playgroud)