【发布时间】:2019-08-24 17:00:34
【问题描述】:
我正在尝试遍历数据框的行以搜索值是否为 TRUE。数据框如下所示:
Mass 900.5 901.5 902.5 1000.5 1001.5
Height 100 200 300 400 500
mass
901.4 FALSE TRUE FALSE FALSE FALSE
903.5 FALSE FALSE FALSE FALSE FALSE
1001.4 FALSE FALSE FALSE FALSE TRUE
如您所见,一行可能有“TRUE”,也可能只有“FALSE”。我想在质量之后迭代第一列的行,并搜索一行是否没有“TRUE”。如果一行没有'TRUE',那么我想将该特定行的值分配为空白(我相信相当于python中的None)。我当前的代码提取“真”值并收集相应的高度值。
例如,上面的数据框在使用我的代码后会产生:
当前结果:
Mass Height
901.4 200
1001.4 500
代码 1:
matches = pd.DataFrame(index=pickuplist['mass'],
columns=df.set_index(list(df.columns)).index,
dtype=bool)
仅供参考,代码 1 是最初定义匹配 df 的位置。
代码 2:
for index, exp_mass, intensity in df.itertuples():
matches[exp_mass] = abs(matches.index - exp_mass)/matches.index < ppm/1e6
以上行是根据 ppm 容差获取值后创建示例数据框的内容。
代码 3:
list = matches.any().reset_index(name='a')[matches.any().values]
以上行是我认为提取质量和高度值的内容(当前结果表)。
我尝试使用 if/iloc 和其他方法来查看是否可以将 None 分配给特定行,但没有奏效。预期结果应该是:
列表:
Mass Height
901.4 200
903.5
1001.4 500
(编辑1) 我尝试使用第一个答案的建议,它给了我这样的建议:
Height
0 TRUE
1 TRUE
2 TRUE
也许数据框的格式不同。也没有 False 或 NaN 值。请注意,高度行和 901.4 行之间有一个空行。
(编辑2) 尝试使用第二个答案中的建议,它给了我:
Mass Height
0 901.4 (901.4, 200)
1 903.5 (903.5, 518)
2 1001.4 (1001.4, 500)
索引 1 行的高度值应该是空的,但由于某种原因得到了一个随机值。通过查看进入匹配数据框的导入数据,518 值似乎是数据的第一个高度值。
输入匹配数据框的原始数据如下所示:
Mass Height
899.1 518
900.5 100
901.5 200
902.5 300
950.5 400
1000.5 400
1001.5 500
等等。
【问题讨论】:
-
如果每行有多个
Trues 会怎样? -
每行不应有多个 True,因为每行可以没有或只有一个质量拾取值。