在熊猫的另一列中找到每个数字条纹的最大值

时间:2019-01-25 08:16:55

标签: python pandas

我有一个像这样的数据框:

private unsafe byte[] ToRgb(byte[] yValuesArr, byte[] uValuesArr,
        byte[] vValuesArr, int uvPixelStride, int uvRowStride)
    {
        var width = PixelSize.Width;
        var height = PixelSize.Height;
        var rgb = new byte[width * height * 4];

        var partitions = Partitioner.Create(0, height);
        Parallel.ForEach(partitions, range =>
        {
            var (item1, item2) = range;
            Parallel.For(item1, item2, y =>
            {
                for (var x = 0; x < width; x++)
                {
                    var yIndex = x + width * y;
                    var currentPosition = yIndex * 4;
                    var uvIndex = uvPixelStride * (x / 2) + uvRowStride * (y / 2);

                    fixed (byte* rgbFixed = rgb)
                    fixed (byte* yValuesFixed = yValuesArr)
                    fixed (byte* uValuesFixed = uValuesArr)
                    fixed (byte* vValuesFixed = vValuesArr)
                    {
                        var rgbPtr = rgbFixed;
                        var yValues = yValuesFixed;
                        var uValues = uValuesFixed;
                        var vValues = vValuesFixed;

                        var yy = *(yValues + yIndex);
                        var uu = *(uValues + uvIndex);
                        var vv = *(vValues + uvIndex);

                        var rTmp = yy + vv * 1436 / 1024 - 179;
                        var gTmp = yy - uu * 46549 / 131072 + 44 - vv * 93604 / 131072 + 91;
                        var bTmp = yy + uu * 1814 / 1024 - 227;

                        rgbPtr = rgbPtr + currentPosition;
                        *rgbPtr = (byte) (rTmp < 0 ? 0 : rTmp > 255 ? 255 : rTmp);
                        rgbPtr++;

                        *rgbPtr = (byte) (gTmp < 0 ? 0 : gTmp > 255 ? 255 : gTmp);
                        rgbPtr++;

                        *rgbPtr = (byte) (bTmp < 0 ? 0 : bTmp > 255 ? 255 : bTmp);
                        rgbPtr++;

                        *rgbPtr = 255;
                    }
                }
            });
        });

        return rgb;
}

,并且我想要一个新列来显示最高价格(只要dir为1),如果dir为0,则将其重置。 我想要的结果看起来像这样:

 df = pd.DataFrame({'dir': [1,1,1,1,0,0,1,1,1,0], 'price':np.random.randint(100,200,10)})

      dir  price 
    0    1    100
    1    1    150
    2    1    190
    3    1    194
    4    0    152
    5    0    151
    6    1    131
    7    1    168
    8    1    112
    9    0    193

1 个答案:

答案 0 :(得分:3)

transformmax一起用于过滤的行:

#get unique groups for consecutive values
g = df['dir'].ne(df['dir'].shift()).cumsum()
#filter only 1
m = df['dir'] == 1
df['max'] = df[m].groupby(g)['price'].transform('max')
print (df)
   dir  price    max
0    1    100  194.0
1    1    150  194.0
2    1    190  194.0
3    1    194  194.0
4    0    152    NaN
5    0    151    NaN
6    1    131  168.0
7    1    168  168.0
8    1    112  168.0
9    0    193    NaN