【问题标题】:Fill a new column if within group a value is present in pandas如果组内的值存在于 pandas 中,则填充一个新列
【发布时间】:2021-12-07 20:40:00
【问题描述】:

我有一个数据框,例如

Groups subgroups Species Value 
G1     subg1     Sp1     NO 
G1     subg1     Sp1     YES 
G1     subg1     Sp2     NO 
G2     subg5     Sp7     YES
G2     subg6     Sp7     NO
G2     subg7     Sp7     NO 
G2     subg7     Sp7     YES 
G3     subg1     Sp1     NO 
G3     subg1     Sp1     NO 

我想在每个GroupssubgroupsSpecies 中填写一个新的Value2 列,如果该组中至少有一个YES ,而 NO 是没有。

然后我应该得到:

Groups subgroups Species Value Value2
G1     subg1     Sp1     NO    YES
G1     subg1     Sp1     YES   YES
G1     subg1     Sp2     NO    NO
G2     subg5     Sp7     YES   YES
G2     subg6     Sp7     NO    NO
G2     subg7     Sp7     NO    YES
G2     subg7     Sp7     YES   YES
G3     subg1     Sp1     NO    NO
G3     subg1     Sp1     NO    NO 

【问题讨论】:

  • 一定是个骗子:df.groupby(['Groups', 'subgroups', 'Species'])['Value'].transform('max')
  • 你的这个previous answer和@QuangHoang类似 还有标准的transform max

标签: python python-3.x pandas


【解决方案1】:

使用groupbytransform

df['Value2'] = (df['Value']=="YES").groupby([df['Groups'], 
                                             df['subgroups'], 
                                             df['Species']])\
                                   .transform('any')\
                                   .map({True:"YES", False:"NO"})
print(df)

输出:

  Groups subgroups Species Value Value2
0     G1     subg1     Sp1    NO    YES
1     G1     subg1     Sp1   YES    YES
2     G1     subg1     Sp2    NO     NO
3     G2     subg5     Sp7   YES    YES
4     G2     subg6     Sp7    NO     NO
5     G2     subg7     Sp7    NO    YES
6     G2     subg7     Sp7   YES    YES
7     G3     subg1     Sp1    NO     NO
8     G3     subg1     Sp1    NO     NO

【讨论】:

    【解决方案2】:

    使用 np.where、groupby、transform

      df['Value2']=np.where(df.groupby(['Groups','subgroups','Species'])['Value'].transform(lambda x: (x=='YES').any()), 'YES','NO')
    
      Groups subgroups Species Value
    0     G1     subg1     Sp1    NO
    1     G1     subg1     Sp1   YES
    2     G1     subg1     Sp2    NO
    3     G2     subg5     Sp7   YES
    4     G2     subg6     Sp7    NO
    5     G2     subg7     Sp7    NO
    6     G2     subg7     Sp7   YES
    7     G3     subg1     Sp1    NO
    8     G3     subg1     Sp1    NO
    

    【讨论】:

      猜你喜欢
      • 2021-10-22
      • 2022-01-27
      • 2020-07-30
      • 1970-01-01
      • 1970-01-01
      • 2020-10-20
      • 1970-01-01
      • 2020-11-17
      相关资源
      最近更新 更多