Поэтому я попытался поиграть с несколькими вариантами, чтобы установить значения нескольких ячеек в Пандах, используя список, но не смог получить правильные результаты. Искал здесь и в гугле без удачи. Вот мой образец DF

df = pd.DataFrame({'PersonID':['AB-123', 'AB-123', 'AB-123', 'AB-123', 'AB-123'],
'Date':['2/1/2016', '2/2/2016', '2/3/2016', '2/4/2016', '2/5/2016']})
df['Score']=''

Я пытаюсь добавить значение в середине столбца «Оценка» и пробовал следующие способы;

Вариант 1. Использование set_value

df = df.set_value([3:5],'Score',[3,4,5])

Не работает из-за нарезки и списка значений.

Вариант 2:

df.loc[3:5,'Score']=[3,4,5]

Та же проблема, что и выше

Вариант 3:

df[df.index[3:5]]['Score']=[3,4,5]

Ни один из вышеперечисленных методов не работает. Кто-нибудь знает, что это может сработать?

1
PyRaider 13 Мар 2018 в 06:15

2 ответа

Лучший ответ

Я не уверен, зачем вам это нужно, используя numpy.r_

import numpy as np
df.loc[np.r_[2:5],'Score']=[3,4,5]
df
Out[307]: 
       Date PersonID  Score
0  2/1/2016   AB-123    NaN
1  2/2/2016   AB-123    NaN
2  2/3/2016   AB-123    3.0
3  2/4/2016   AB-123    4.0
4  2/5/2016   AB-123    5.0
2
YOBEN_S 13 Мар 2018 в 03:27

Вы можете позволить пандам управлять выравниванием индексации за вас.

df['Score'] = pd.Series([3, 4, 5], index=np.r_[2:5])
df

       Date PersonID  Score
0  2/1/2016   AB-123    NaN
1  2/2/2016   AB-123    NaN
2  2/3/2016   AB-123    3.0
3  2/4/2016   AB-123    4.0
4  2/5/2016   AB-123    5.0

np.r_ используется здесь с тем же эффектом, что и в ответе Вена. Заметка; вам не нужно предварительно инициализировать df['Score'] = '', как вы это делаете в настоящее время, если используете этот метод.

1
cs95 13 Мар 2018 в 03:36