Как поменять строку на основе сравнения? - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть Pandas Dataframe, как показано ниже, у меня есть столбец с именем Quantity_with_sign.Проблема с этими данными в том, что порядок строк не такой, как ожидалось.Обычно это cum_sum этой серии не доходит, т. Е. Всегда имеет большие положительные значения сумм до прихода отрицательных.Но мои данные теперь имеют альтернативные строки.то есть, cum_sum имеет отрицательные записи.Я хочу поменять эти записи, чтобы они всегда поддерживали значение cum_sum отличным от нуля.

Пример-1

ВХОД ОБРАЗЦА:

  Posting Date  Quantity_with_sign
0   2018-03-15                 217
1   2018-03-25                -218
2   2018-04-25                4144
3   2018-06-07                  -1
4   2018-06-07                  -1
5   2018-06-07               -2330
6   2018-06-08               -1811

ВЫБОР ВЫБОРА:

  Posting Date  Quantity_with_sign
0   2018-03-15                 217
1   2018-04-25                4144
2   2018-03-25                -218
3   2018-06-07                  -1
4   2018-06-07                  -1
5   2018-06-07               -2330
6   2018-06-08               -1811

Пример-2

ОБРАЗЕЦ ВХОДА:

  Posting Date  Quantity_with_sign
0   2018-06-09                1111
1   2018-07-09               -1111
2   2018-07-13               -1111
3   2018-08-09                1111

ВЫБОР ОБРАЗЦА:

  Posting Date  Quantity_with_sign
0   2018-06-09                1111
1   2018-07-09               -1111
2   2018-08-09                1111
3   2018-07-13               -1111

Пример-3

ВВОД ОБРАЗЦА:

  Posting Date  Quantity_with_sign
0   2018-04-25                -672
1   2018-06-07                 578
2   2018-06-07                  94

ВЫБОР ОБРАЗЦА:

  Posting Date  Quantity_with_sign
0   2018-06-07                 578
1   2018-06-07                  94
2   2018-04-25                -672

Примечание: Для этой задачи я не могу просто отсортировать (убрать) значения и сделать cum_sum положительным.здесь следует поддерживать порядок

Например, если у меня есть строки в этом порядке

10
5
20
-12
34
.
.
.

Я не могу разместить -12 после 20 или 34, Он должен быть размещен после5. Потому что после того, как 5 cum_sum пересекли> 12. Поэтому я должен поместить -12 после 5.

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

x=df['Quantity_with_sign']>0
pos=df[x]['Quantity_with_sign'].values
neg=df[~x]['Quantity_with_sign'].values.tolist()
cum_sum=np.cumsum(pos)
res=copy.copy(pos)
while(len(neg)!=0):
    first=neg.pop(0)*-1
    ind= np.argmax(cum_sum>=first)
    res.insert(first,ind+1)

Я не удовлетворен таким подходом.Пожалуйста, помогите мне решить эту проблему более обобщенным способом.

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