print (df)
Q Name Region username
15 RF India Karthik
12 INTERNET NaN Paul
9 INTERNET India Raj
10 INTERNET India Ram
11 INTERNET China Xin
13 TOOLS china Zang
14 TOOLS china chin
以上是我希望输出应该是的数据框 如果所有成员都是印度人,则将YEs放入ALLINDIA 如果成员中至少有一个印度,则将YE放在AtleastoneINDIA中 如果成员不包含至少一个印度,则将YE放入non_INDia
答案 0 :(得分:2)
通过eq
(==
)比较布尔掩码,并通过agg
和函数all
进行汇总
any
,然后通过每行倒数any
和最后add_suffix
的反函数创建新列:
df1 = (df['Region'].eq('India')
.groupby(df['Q Name'])
.agg(['all','any'])
.assign(non= lambda x: ~x.any(axis=1))
.add_suffix('_india'))
print (df1)
all_india any_india non_india
Q Name
INTERNET False True False
RF True True False
TOOLS False False True
如果也在True
列中更改any
的{{1}},也可以进行小的修改:
all
最后df1 = (df['Region'].eq('India')
.groupby(df['Q Name'])
.agg(['all','any'])
.assign(non= lambda x: ~x.any(axis=1),
any = lambda x: x['any'] & ~x['all'])
.add_suffix('_india'))
print (df1)
all_india any_india non_india
Q Name
INTERNET False True False
RF True False False
TOOLS False False True
个值使用numpy.where
:
yes