Установка значения кадра данных на основе серии idx - PullRequest
0 голосов
/ 26 мая 2018

С учетом кадра данных df:

A       B       C
0.10    0.83    0.07
0.40    0.30    0.30
0.70    0.17    0.13    
0.72    0.04    0.24    
0.15    0.07    0.78    

И серии s:

A    3
B    0
C    4
dtype: int64

Есть ли способ легко установить
элемент 3столбца A,
элемент 0 столбца B &
элемент 4 столбца C
без зацикливания серии?

Что-то взначение:

df.loc[s] = 'spam'

(но это устанавливает целые строки)

Желаемый результат будет:

A       B       C
0.10    spam    0.07
0.40    0.30    0.30
0.70    0.17    0.13    
spam    0.04    0.24    
0.15    0.07    spam    

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Есть несколько способов сделать это.Оба требуют преобразования ваших данных в тип object, чтобы присвоить строки ранее float серии.

Опция 1: numpy

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

import numpy as np

# convert to numpy object array
vals = df.values.astype(object)

# transform coordinates
coords = [(3, 0), (0, 1), (4, 2)]
idx = np.r_[coords].T

# apply indices
vals[idx[0], idx[1]] = 'spam'

# create new dataframe
res = pd.DataFrame(vals, index=df.index, columns=df.columns)

print(res)

      A     B     C
0   0.1  spam  0.07
1   0.4   0.3   0.3
2   0.7  0.17  0.13
3  spam  0.04  0.24
4  0.15  0.07  spam

Вариант 2: pd.DataFrame.at

Не векторизованное, но более простое решение - использовать pd.DataFrame.at в цикле for:

coords = [(3, 'A'), (0, 'B'), (4, 'C')]

df = df.astype(object)

for row, col in coords:
    df.at[row, col] = 'spam'

print(df)

      A     B     C
0   0.1  spam  0.07
1   0.4   0.3   0.3
2   0.7  0.17  0.13
3  spam  0.04  0.24
4  0.15  0.07  spam
0 голосов
/ 26 мая 2018

пусть s будет серией, определенной выше.

Затем мы сначала устанавливаем значение np.nan в базовом массиве, а затем присваиваем 'spam'.

df.values[s.values, np.arange(s.size)] = np.nan # this modifies the dataframe in-place
df.fillna('spam', inplace=True)

выходам.:

      A     B     C
0   0.1  spam  0.07
1   0.4   0.3   0.3
2   0.7  0.17  0.13
3  spam  0.04  0.24
4  0.15  0.07  spam
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...