我有一个 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。
您可以使用自定义函数来比较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)