如何根据熊猫的条件对值进行划分并放在下一列中

时间:2018-12-17 09:47:04

标签: pandas

enter image description here

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

enter image description here

1 个答案:

答案 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