Изменить часть значения столбца dataframe на основе некоторого другого столбца - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь обновить / изменить определенную часть фрейма данных на основе значения другого столбца.

Если столбец ['a'] равен нулю, заполните столбец ['a'] значением столбца ['b'], как показано ниже

list_position = [[4, 35]]
df.iloc[list_position[0][0]:list_position[0][1] + 1,:]['a'] = df.iloc[list_position[0][0]:list_position[0][1] + 1,:].apply(lambda row: row['a'] * row['b'] if np.isnan(row['a']) else row['b'], axis=1)

Выдает ошибку как TypeError: an integer is required.

Traceback (most recent call last):
  File "pandas\_libs\index.pyx", line 162, in pandas._libs.index.IndexEngine.get_loc
  File "pandas\_libs\hashtable_class_helper.pxi", line 958, in pandas._libs.hashtable.Int64HashTable.get_item
TypeError: an integer is required

Любое предложение исправить это очень ценится.

Обновление 1. Я попробовал все три способа, как предложено в 1 повторном ответе

df['Cat1'].fillna(df['Cat2'])    

и

2 ответа на этот пост.

1. df['a'][df['a'].isnull()] = df['b']
2. df['a'] = df['a'].fillna(df['b'])

Все выдают такую ​​же ошибку, как:

Traceback (most recent call last):
  File "pandas\_libs\index.pyx", line 162, in 
pandas._libs.index.IndexEngine.get_loc
  File "pandas\_libs\hashtable_class_helper.pxi", line 958, in 
pandas._libs.hashtable.Int64HashTable.get_item
TypeError: an integer is required

Это работает, если я заменяю имя столбца на номер столбца, например

df[7] = df[7].fillna(df[8)

Не знаю почему,если у кого-то есть объяснение тому же.

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Я вижу логику, которую вы пытаетесь использовать для выполнения задачи, но есть гораздо более простой способ сделать это.

df['a'] = df['a'].fillna(df['b'])

Это заполнит нулевые значения в столбце a значениями в столбце b для того же индекса.Однако если столбец b имеет нулевые значения, а столбец a имеет нулевые значения, столбец a также будет иметь нулевые значения.

0 голосов
/ 30 января 2019

Это должно работать в вашем случае

df['a'][df['a'].isnull()] = df['b']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...