我有一个 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
最佳答案
您可以在 NAME
上使用 groupby
并应用
lambda 来测试您的条件并获取 max
值这将是 True
如果任何满足条件并使用 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
在使用np.where
后可以转换为Y
或N
:
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
关于python - 如果至少有一个值低于阈值,则选择给定 2 列的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38125815/