【问题标题】:Pandas flexible boolean row sub settingPandas 灵活的布尔行子设置
【发布时间】:2021-12-27 12:20:55
【问题描述】:

是否可以通过多个行条件为单个值对 Pandas 1.3.4 数据框进行子集化?为了更清楚地说明这一点,如果我有 df:

index    col1    col2    
  0        A      10
  1        A      20
  2        B      130
  3        C      10

如果我想根据col2 值进行子集化,我可以使用df[df['col2']>10]

index    col1    col2    
  
  1        A      20
  2        B      130

  

但是是否可以根据col1 的值使用不同的阈值对col2 进行子集化?

例如:

df[df['col2']>10 if col1 == 'A' 
   OR df['col2']>5 if col1 == 'C' 
   OR df['col2']>1000 if col1 == 'B']` 

会给:

index    col1    col2    
  
  1        A      20
  
  3        C      10

谢谢!

提姆

【问题讨论】:

    标签: pandas dataframe boolean subset


    【解决方案1】:

    如果需要比较更大的所有值,请按字典使用 Series.map 并进行比较:

    d = {'A' : 10,'C': 5 ,'B': 1000}
    
    df[df['col2'] > df['col1'].map(d)]
    

    或者如果需要不同的掩码链,& 按位 AND| 按位 OR

    df[((df['col2']>10) & (df['col1']== 'A') ) |
       ((df['col2']>5) & (df['col1']== 'C') ) |
       ((df['col2']>1000) & (df['col1']== 'B') )] 
    

    【讨论】:

      猜你喜欢
      • 2019-12-27
      • 2021-10-11
      • 2015-08-11
      • 1970-01-01
      • 2021-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      相关资源
      最近更新 更多