我有一个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
几乎无法解释。
答案 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