【问题标题】:How to compare the z values of all row with same x and y values efficiently?如何有效地将所有行的 z 值与相同的 x 和 y 值进行比较?
【发布时间】:2019-06-19 08:49:27
【问题描述】:

我有一个带有 x、y、z 和 b 列的 pandas 数据框。对于每个 x 和 y 对(描述像素),如果所有 z 值仅在某个阈值(例如 0.3)内不同,我想比较所有像素的 z 值并将 b 设置为 true。如果某些像素的 z 值差异超过阈值,则仅将 z 值最小的像素(在阈值内)设置 b 为 true,将其他像素(高于阈值)设置为 false。

我想,我可能会使用pandas的@​​987654321@函数,比如

df[['x','y','z','b']].groupby(['x','y'])

获取所有具有相同 x 和 y 的集合。但是我怎样才能应用一个函数来执行即将到来的比较等等?还是有一些 numpy 函数可以做到这一点?

例子:

我有下表(作为数据框)

xyz ----------------------------------------- 1124 922 78.601423 1124 922 78.602461 1124 922 95.140586 1123 922 78.603544 1123 922 78.604400 1123 922 78.605449 1123 922 78.606395 1123 922 87.247255 1123 922 87.234766 1123 922 78.609117 1123 922 78.610156 ...

我想要的,应该是什么样子的

x y z b ---------------------------------- 1124 922 78.601423 真 1124 922 78.602461 真 1124 922 95.140586 假 1123 922 78.603544 真 1123 922 78.604400 真 1123 922 78.605449 真 1123 922 78.606395 真 1123 922 87.247255 假 1123 922 87.234766 假 1123 922 78.609117 真 1123 922 78.610156 真 ...

【问题讨论】:

    标签: python pandas numpy


    【解决方案1】:

    IIUC,使用:

    s=df.groupby(['x','y'])['z'].transform('min')
    #if you need subtract based on the first value and not min use :
    #s=df.groupby(['x','y'])['z'].transform('first')
    df=df.assign(b=df.z.eq(s)|(df['z']-s).le(0.3))
    

           x      y          z      b
    0   1124  922.0  78.601423   True
    1   1124  922.0  78.602461   True
    2   1124  922.0  95.140586  False
    3   1123  922.0  78.603544   True
    4   1123  922.0  78.604400   True
    5   1123  922.0  78.605449   True
    6   1123  922.0  78.606395   True
    7   1123  922.0  87.247255  False
    8   1123  922.0  87.234766  False
    9   1123  922.0  78.609117   True
    10  1123  922.0  78.610156   True
    

    【讨论】:

    • 我认为 jezrael 的意思是 z 系列可能具有以下值 78、90、90.01、90.02、90.03。在这种情况下,您提到的逻辑不适用于jezrael
    • @AnantGupta 谢谢,所以在这种情况下,预期的输出应该是什么?只是确认我的问题是否正确
    • 谢谢,看起来不错!我只是在测试。并且您正确地假设了最小值。
    • 按照上面提到的逻辑,答案应该是 False, True, False, False,False
    猜你喜欢
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多