我有一个数据框架:
group id
A 009x
A 010x
B 009x
B 002x
C 002x
C 003x
如何创建一个新列new
,该列group
根据以下三个条件有条件地进行分类:
- 如果所有
id
值都包含ONLY009x
和010x
,则归为g1
- 如果
id
值是009x
或010x
中的一个AND另一个id
值不属于009x
或010x
,则归类为g2
- 否则,只打印
id
值
期望结果:
group id new
A 009x g1
A 010x g1
B 009x g2
B 002x g2
C 002x 002x
C 003x 003x
data = {
'group': ['A', 'A', 'B', 'B', 'C', 'C'],
'id': ['009x', '010x', '009x', '002x', '002x', '003x'],
}
df = pd.DataFrame(data)
df
我希望我没理解错你的问题。您可以使用.groupby()
+自定义函数:
def categorize_fn(x):
tmp = x["id"].isin(["009x", "010x"])
if tmp.all():
x["new"] = "g1"
elif tmp.any():
x["new"] = "g2"
else:
x["new"] = x["id"]
return x
df = df.groupby("group", group_keys=False).apply(categorize_fn)
print(df)
打印:
group id new
0 A 009x g1
1 A 010x g1
2 B 009x g2
3 B 002x g2
4 C 002x 002x
5 C 003x 003x