python - 将一列与多列进行比较,并返回熊猫条件首先匹配的索引
问题描述
我想将我的数据框的列(年龄)与某些列(1 到 7)进行比较并设置一个条件,例如 col 1 到 7 的任何值是 col Age 值的 75% 或更少,那么我想要返回匹配的第一列的索引。
Weight Name Age 1 2 3 4 5 6 7 Output
0 45 Sam 100 -75.0 -45.0 -92.0 -79.0 -57.0 -55.0 -35.0 true
1 88 Andrea 25 30.0 -17.0 -4.0 18.0 20.0 40.0 NaN true
2 56 Alex 55 -47.0 -34.0 -12.0 -10.0 10.0 NaN NaN true
3 15 Robin 8 13.0 35.0 37.0 57.0 NaN NaN NaN false
4 71 Kia 21 22.0 24.0 44.0 NaN NaN NaN NaN false
5 44 Sia 43 2.0 22.0 NaN NaN NaN NaN NaN true
6 54 Ryan 45 20.0 NaN NaN NaN NaN NaN NaN true
7 34 Dimi 65 NaN NaN NaN NaN NaN NaN NaN false
我能够生成具有真假的列,如果在一行中,任何值都比“年龄”列中的值少 75%,代码如下:
df['Output'] = ((df[['Age']].values)* 0.75 > df.iloc[:, 3:9].values).any(axis=1)
但是,我想获取列的名称,它将输出设为 true。如果输出为假,我想获得该行的最大值,为此我使用 .idxmax(axis=1)。
Weight Name Age 1 2 3 4 5 6 7 Expected Output
0 45 Sam 100 -75.0 -45.0 -92.0 -79.0 -57.0 -55.0 -35.0 1
1 88 Andrea 25 30.0 -17.0 -4.0 18.0 20.0 40.0 NaN 2
2 56 Alex 55 -47.0 -34.0 -12.0 -10.0 10.0 NaN NaN 1
3 15 Robin 8 13.0 35.0 37.0 57.0 NaN NaN NaN 4
4 71 Kia 21 22.0 24.0 44.0 NaN NaN NaN NaN 3
5 44 Sia 43 2.0 22.0 NaN NaN NaN NaN NaN 1
6 54 Ryan 45 20.0 NaN NaN NaN NaN NaN NaN 1
7 34 Dimi 65 NaN NaN NaN NaN NaN NaN NaN NaN
解决方案
尝试使用 apply() 方法遍历行:
def compare_age(row):
age = row['age']
columns = [str(num) for num in range(1, 8)]
value = row[[columns]].max()
for column in columns:
if row[column] <= 0.75*age:
value = float(column)
break
return value
df['Output'] = df.apply(compare_age, axis=1)
推荐阅读
- javascript - 加号在这里有什么用?
- mysql - MySQL Query - 按日期排序和日期范围内的组字段
- java - interfacename.class 返回什么?
- django - Django,获取其他用户的数据
- python-3.x - 使用 Python + Selenium 选择下拉菜单
- angular - 如何在 Store 中使用 resolve
- ios - 从 UserDefaults (Swift) 加载颜色时,应用程序在启动时崩溃
- c# - 无法将列表保存到会话/ViewBag 变量
- html - 如何实现列大小调整?
- vue.js - 更新vue js后组件数据不变