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

时间:2018-01-05 08:07:37

标签: python pandas

我有一个ID为公司名称的DataFrame,如下所示。

CCleaner

如何将指示作业更改的标志添加到上面的DataFrame中,如下所示?

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

关于如何在stackoverflow中使用pandas在 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 中使用diff几乎无法解释。

1 个答案:

答案 0 :(得分:3)

您可以使用自定义函数与比较shift ed组替换NaN s,向后填充bfill,最后将布尔掩码转换为整数astype

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

谢谢你,@ 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