在Python中基于分组条件创建新列

3

我有一个数据框:

id group
x1   A
x1   B
x2   A
x2   A
x3   B

我想创建一个新列new_group,根据以下条件: 如果在同一个id中有两个不同的group值,例如行1和2的A组和B组,则new_group的值应为"two"。如果在同一个id中仅有1个唯一的group值,例如行3和4的A组,则new_group的值应为该组A。否则,指定B。
id group new_group
x1   A     two
x1   B     two
x2   A      A
x2   A      A
x3   B      B

我尝试过这样的操作,但不知道如何捕捉所有的if-else条件:

df.groupby("id")["group"].filter(lambda x: x.nunique() == 2)
2个回答

4
快要完成了。将filter更改为transform并使用条件:
df['new_group'] = df.groupby("id")["group"] \
                    .transform(lambda x: 'two' if (x.nunique() == 2) else x)
print(df)

# Output:
   id group new_group
0  x1     A       two
1  x1     B       two
2  x2     A         A
3  x2     A         A
4  x3     B         B

1
请使用inflect库。这样您就可以将任何整数转换为单词。下面是代码:
import inflect

p = inflect.engine()
df['temp']=df.groupby('id')['group'].transform('nunique')

df =df.assign(new_group= np.where(df['temp'].ge(2),df['temp'].apply(lambda x: p.number_to_words(x)),df['group'])).drop(columns=['temp'])





    id group new_group
0  x1     A       two
1  x1     B       two
2  x2     A         A
3  x2     A         A
4  x3     B         B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接