如果至少有一个值低于阈值,则选择给定2列的行

时间:2016-06-30 14:16:33

标签: python pandas select

我有一个pandas数据帧

NAME    VALUE
  A        2 
  A        1 
  B        4 
  A        3 
  C        2 
  B        8 

我想在列"名称"中的值添加列。在"值"中包含至少一个值低于3,对应于名称,以便:

NAME    VALUE   BELOW_THRESHOLD
  A        2          Y 
  A        4          Y 
  B        4          N 
  A        3          Y 
  C        2          Y 
  B        8          N 

2 个答案:

答案 0 :(得分:4)

您可以使用groupby上的NAMEapply用于测试您的情况的lambda,并使用maxTrue如果符合条件并使用map分配:

In [317]:
df['BELOW_THRESHOLD'] = df['NAME'].map(df.groupby('NAME')['VALUE'].apply(lambda x: (x < 3).max()))
df

Out[317]:
  NAME  VALUE BELOW_THRESHOLD
0    A      2            True
1    A      1            True
2    B      4           False
3    A      3            True
4    C      2            True
5    B      8           False

使用Y后,您可以转换为Nnp.where

In [318]:
df['BELOW_THRESHOLD'] = np.where(df['BELOW_THRESHOLD'], 'Y','N')
df

Out[318]:
  NAME  VALUE BELOW_THRESHOLD
0    A      2               Y
1    A      1               Y
2    B      4               N
3    A      3               Y
4    C      2               Y
5    B      8               N

答案 1 :(得分:3)

您也可以使用transform:

df.groupby('NAME').transform('min') < 3
Out[47]: 
   VALUE
0   True
1   True
2  False
3   True
4   True
5  False

它返回一个布尔数组,所以如果你需要Y / N,你可以把它传递给像EdChum那样的np.。