Заполнить значение столбца данных инкрементным номером, Python 3.6 - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть Dataframe содержит столбцы + столбец «Порядок», который содержит целые уникальные числа, а некоторые строки равны нулю.

Мне нужно обновить ноль с помощью добавочного номера от максимального значения значения «Порядок».

Например:

Максимальное значение df ['Order'] = 4, и есть 3 записи. Df ['Order'] == 0, тогда эти 3 строки с 0 значениями необходимо заполнить 5,6, 7.

Я попробовал следующий скрипт:

Dimension_Items = {'Col1':['A', 'B', 'C', 'D', 'E', 'F'], 'Order':[0,2,3,4,0,0]}
Dimension_Items = pd.DataFrame.from_dict(Dimension_Items)

Max_Order = Dimension_Items['Order'].max()
Dimension_Items.loc[Dimension_Items['Order'] == 0, 'Order'] = range(Max_Order+1, len(Dimension_Items)+1)

Ошибка:

Traceback (most recent call last):
    Dimension_Items.loc[Dimension_Items['Order'] == 0, 'Order'] = range(Max_Order+1, len(Dimension_Items)+1)
  File "C:\Python36\lib\site-packages\pandas\core\indexing.py", line 189, in __setitem__
    self._setitem_with_indexer(indexer, value)
  File "C:\Python36\lib\site-packages\pandas\core\indexing.py", line 606, in _setitem_with_indexer
    raise ValueError('Must have equal len keys and value '
ValueError: Must have equal len keys and value when setting with an iterable

Ошибка выдачи, пожалуйста, помогите в этом

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Так что мы можем выделить нули и затем заполнить их значениями из списка, если я правильно понимаю.

l = range(df.Order.max() + 1, df.Order.max() + df.loc[df.Order == 0, 'Order'].size + 1)

df.loc[df.Order == 0, 'Order'] = l

  Col1  Order
0    A      5
1    B      2
2    C      3
3    D      4
4    E      6
5    F      7 
0 голосов
/ 15 февраля 2019

SPy.

Вы можете перебрать DataFrame, чтобы найти элементы с Order = 0, а затем обновить каждый Order с max_order + 1. Попробуйте:

import pandas as pd

data = {

    'Col1': ['A', 'B', 'C', 'D', 'E', 'F'], 
    'Order': [0, 2, 3, 4, 0, 0]

}

df = pd.DataFrame(data)

max_order = df['Order'].max()

for i in range(len(df)):

    if df.loc[i, 'Order'] == 0:
        df.loc[i, 'Order'] = max_order + 1
        max_order += 1

df.head()

Output:

    Order   Value
0      A        5
1      B        2
2      C        3
3      D        4
4      E        6

Надеюсь, это поможет.

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