gpt4 book ai didi

Python,DataFrame - 在一行中查找某个值

转载 作者:太空宇宙 更新时间:2023-11-03 23:52:29 25 4
gpt4 key购买 nike

我有一些问题,希望你能帮助我。数据如下:

Data

该列标记为高度,数字是该时间范围内的可用数据。所以例如对于第一行,在 288m 的高度只有 10% 的数据可用(其他 90% 无法测量)

我想设置一个阈值,例如 80。因此只应包含至少包含 80% 可用数据的高度。对于每一行,我想找到 >= 80 仍然为真的最后一个值。然后应将找到该值的高度添加到新列中。

我可以显示行:df.iloc[0],这会得到第一行的所有值...通常我会写一个循环但因为这是 Pandas DataFrame 应该有一个更方便的选项用于获取条件 >= 80 为真的最后一个值。

伪代码如下所示:

  • 对于数据框中的每一行,检查值是否 >= 80
  • 为条件为真的最后一个值提取列名
  • 将此值附加到名为“高度值”的新列

我希望我说清楚了。我对 Pandas 还很陌生,似乎很难理解基于条件表达式的数据提取。

编辑:

前 3 行的 pandas 代码是:(时间索引不重要,所以我没有包括它)

pdf = pd.DataFrame([[100.0, 100.0, 100.0, 100.0, 100.0, 99.0, 97.0, 93.0, 71.0, 45.0, 27.0, 10.0],
[100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 94.0, 81.0, 62.0, 36.0, 9.0],
[100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 92.0, 90.0, 68.0, 45.0, 25.0, 13.0]],
columns=[40.0, 58.0, 78.0, 98.0, 118.0, 138.0, 163.0, 178.0, 198.0, 228.0, 248.0, 288.0])

编辑 2:输出数据应如下所示:

result = pd.DataFrame([[100.0, 100.0, 100.0, 100.0, 100.0, 99.0, 97.0, 93.0, 71.0, 45.0, 27.0, 10.0, 178.0],
[100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 94.0, 81.0, 62.0, 36.0, 9.0, 198.0],
[100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 92.0, 90.0, 68.0, 45.0, 25.0, 13.0, 178.0]],
columns=[40.0, 58.0, 78.0, 98.0, 118.0, 138.0, 163.0, 178.0, 198.0, 228.0, 248.0, 288.0,'max_available_height'])

最佳答案

如果匹配任何值,用 DataFrame.any 测试它和 numpy.whereDataFrame.idxmaxDataFrame.iloc对于最后匹配值的交换排序,否则返回默认值 - 例如不匹配:

thresh = 80
mask = pdf >= thresh
pdf['height value'] = np.where(mask.any(axis=1), mask.iloc[:,::-1].idxmax(axis=1), 'no match')
print (pdf)
40.0 58.0 78.0 98.0 118.0 138.0 163.0 178.0 198.0 228.0 \
0 100.0 100.0 100.0 100.0 100.0 99.0 97.0 93.0 71.0 45.0
1 100.0 100.0 100.0 100.0 100.0 100.0 100.0 94.0 81.0 62.0
2 100.0 100.0 100.0 100.0 100.0 100.0 92.0 90.0 68.0 45.0

248.0 288.0 height value
0 27.0 10.0 178.0
1 36.0 9.0 198.0
2 25.0 13.0 178.0

详细信息:

 print (mask)
40.0 58.0 78.0 98.0 118.0 138.0 163.0 178.0 198.0 228.0 \
0 True True True True True True True True False False
1 True True True True True True True True True False
2 True True True True True True True True False False

248.0 288.0
0 False False
1 False False
2 False False

print (mask.iloc[:,::-1])
288.0 248.0 228.0 198.0 178.0 163.0 138.0 118.0 98.0 78.0 \
0 False False False False True True True True True True
1 False False False True True True True True True True
2 False False False False True True True True True True

58.0 40.0
0 True True
1 True True
2 True True

关于Python,DataFrame - 在一行中查找某个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58914421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com