Как извлечь данные из Pandas DataFrame на основе значений столбцов в другом DataFrame? - PullRequest
0 голосов
/ 18 февраля 2020

Вот мои два мультииндексных фрейма данных:

    df1:
    Index_0 Index_1         KEYS           FLOOR    NBVAL   ACCBV
     116    1687    X425531.25Y6407133.75   505.5   184.3   1690.7
     117    1906    X425531.25Y6407141.25   505.0    56.4   2243.4
     118    2141    X425531.25Y6407148.75   504.5    29.7   2712.7


    df2:
     Index0 Index1         KEYS             FLOOR    NBVAL   ACCBV   ACCNB   ACCPB
      116   726     X425531.25Y6407133.75   508.5   -133.0  -133.0  -133.0     0.0
      116   854     X425531.25Y6407133.75   508       18.2  -114.8  -133.0    18.2
      116   994     X425531.25Y6407133.75   507.5    233.7   118.9  -133.0   251.9
      116   1146    X425531.25Y6407133.75   507     -125.0    -6.1  -258.0   251.9
      116   1313    X425531.25Y6407133.75   506.5    467.0   460.9  -258.0   718.9
      116   1493    X425531.25Y6407133.75   506      374.2   835.1  -258.0  1093.1
      116   1687    X425531.25Y6407133.75   505.5   -122.0   713.1  -380.0  1093.1
      116   1895    X425531.25Y6407133.75   505     -121.2   591.8  -501.2  1093.1
      117   734     X425531.25Y6407141.25   508.5   -132.1  -132.1  -132.1     0.0
      117   862     X425531.25Y6407141.25   508       -0.5  -132.6  -132.6     0.0
      117   1003    X425531.25Y6407141.25   507.5    312.4   179.8  -132.6   312.4
      117   1155    X425531.25Y6407141.25   507      653.0   832.8  -132.6   965.4
      117   1323    X425531.25Y6407141.25   506.5    564.1  1396.8  -132.6  1529.5
      117   1503    X425531.25Y6407141.25   506      436.2  1833.0  -132.6  1965.6
      117   1698    X425531.25Y6407141.25   505.5    353.9  2187.0  -132.6  2319.6
      117   1906    X425531.25Y6407141.25   505       56.4  2243.4  -132.6  2376.0
      117   2129    X425531.25Y6407141.25   504.5   -238.6  2004.8  -371.2  2376.0
      118   742     X425531.25Y6407148.75   508.5   -125.6  -125.6  -125.6     0.0
      118   870     X425531.25Y6407148.75   508      -14.0  -139.6  -139.6     0.0
      118   1012    X425531.25Y6407148.75   507.5    494.1   354.5  -139.6   494.1
      118   1164    X425531.25Y6407148.75   507      682.0  1036.5  -139.6  1176.1
      118   1333    X425531.25Y6407148.75   506.5    597.0  1633.5  -139.6  1773.1
      118   1513    X425531.25Y6407148.75   506      474.1  2107.6  -139.6  2247.2
      118   1709    X425531.25Y6407148.75   505.5    373.6  2481.2  -139.6  2620.8
      118   1917    X425531.25Y6407148.75   505      201.7  2683.0  -139.6  2822.6
      118   2141    X425531.25Y6407148.75   504.5     29.7  2712.7  -139.6  2852.3
      118   2380    X425531.25Y6407148.75   504     -341.3  2371.4  -480.9  2852.3

Я как-то новичок в Python, и мне удалось добраться до этой точки, где я получил два вышеупомянутых фрейма данных, однако я изо всех сил пытаюсь двигаться вперед , Отсюда мои вопросы ниже:

Во-первых, как я могу накапливать 'ACCNB' из 'NBVAL', только если последнее отрицательно (пример выше был рассчитан в MS Excel). Во-вторых, как я могу накапливать «ACCPB» из «NBVAL», только если последний положительный (также рассчитывается с использованием Excel). В-третьих, как я могу извлечь строки из df2, у которых элемент 'FLOOR' больше или равен 'FLOOR' в df1, когда Index0 в df1 совпадает с Index0 в df2? df1 получен из df2, а мультииндекс в df2 был создан с использованием groupby (by = 'KEYS' ...).

Ниже приведен желаемый результат:

     df3:
     Index0 Index1          KEYS            FLOOR    NBVAL   ACCBV   ACCNB   ACCPB
      116   726     X425531.25Y6407133.75   508.5   -133.0  -133.0  -133.0     0.0
      116   854     X425531.25Y6407133.75   508       18.2  -114.8  -133.0    18.2
      116   994     X425531.25Y6407133.75   507.5    233.7   118.9  -133.0   251.9
      116   1146    X425531.25Y6407133.75   507     -125.0    -6.1  -258.0   251.9
      116   1313    X425531.25Y6407133.75   506.5    467.0   460.9  -258.0   718.9
      116   1493    X425531.25Y6407133.75   506      374.2   835.1  -258.0  1093.1
      117   734     X425531.25Y6407141.25   508.5   -132.1  -132.1  -132.1     0.0
      117   862     X425531.25Y6407141.25   508       -0.5  -132.6  -132.6     0.0
      117   1003    X425531.25Y6407141.25   507.5    312.4   179.8  -132.6   312.4
      117   1155    X425531.25Y6407141.25   507      653.0   832.8  -132.6   965.4
      117   1323    X425531.25Y6407141.25   506.5    564.1  1396.8  -132.6  1529.5
      117   1503    X425531.25Y6407141.25   506      436.2  1833.0  -132.6  1965.6
      117   1698    X425531.25Y6407141.25   505.5    353.9  2187.0  -132.6  2319.6
      117   1906    X425531.25Y6407141.25   505       56.4  2243.4  -132.6  2376.0
      118   742     X425531.25Y6407148.75   508.5   -125.6  -125.6  -125.6     0.0
      118   870     X425531.25Y6407148.75   508      -14.0  -139.6  -139.6     0.0
      118   1012    X425531.25Y6407148.75   507.5    494.1   354.5  -139.6   494.1
      118   1164    X425531.25Y6407148.75   507      682.0  1036.5  -139.6  1176.1
      118   1333    X425531.25Y6407148.75   506.5    597.0  1633.5  -139.6  1773.1
      118   1513    X425531.25Y6407148.75   506      474.1  2107.6  -139.6  2247.2
      118   1709    X425531.25Y6407148.75   505.5    373.6  2481.2  -139.6  2620.8
      118   1917    X425531.25Y6407148.75   505      201.7  2683.0  -139.6  2822.6
      118   2141    X425531.25Y6407148.75   504.5     29.7  2712.7  -139.6  2852.3

Извинения за размер примеров ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...