#python #pandas #list #dataframe
#python #панды #Список #фрейм данных #pandas
Вопрос:
У меня есть один фрейм данных с 2 столбцами, и я хочу добавить новый столбец;
Этот новый столбец должен быть обновлен на основе списка, который у меня есть:
list = [0,1,2,3,6,7,9,10]
Новый столбец обновляется значением списка, только если флаг (в col2) равен 1.
Если флаг равен 0, не заполняйте строку в новом столбце.
Текущий DF
------------- ---------
| context | flag |
------------- ---------
| 0 | 1 |
| 0 | 1 |
| 0 | 0 |
| 2 | 1 |
| 2 | 1 |
| 2 | 1 |
| 2 | 1 |
| 2 | 0 |
| 4 | 1 |
| 4 | 1 |
| 4 | 0 |
------------- ---------
Желаемый DF
------------- --------- -------------
| context | flag | new_context |
------------- --------- -------------
| 0 | 1 | 0 |
| 0 | 1 | 1 |
| 0 | 0 | |
| 2 | 1 | 2 |
| 2 | 1 | 3 |
| 2 | 1 | 6 |
| 2 | 1 | 7 |
| 2 | 0 | |
| 4 | 1 | 9 |
| 4 | 1 | 10 |
| 4 | 0 | |
------------- --------- -------------
Прямо сейчас я перебираю индексы списка и присваиваю значение списка столбцу new_context. Затем я увеличиваю, чтобы просмотреть список.
Значения заполняются в правильных местах, но все они говорят 0. Я не верю, что он выполняет итерацию по списку должным образом.
list_length = len(list)
i=0
for i in range(list_length])):
df["new_context"] = [list[i] if ele == 0 else "" for ele in df["flag"]]
if df["flag"] == 0: i =1
Я также попытался выполнить итерацию по всему фрейму данных, однако я думаю, что это просто применение одного и того же значения списка (первое значение списка равно 0)
i=0
for index, row in df.iterrows():
df["new_context"] = [list[i] if ele == 0 else "" for ele in df["flag"]]
if row['flag'] == 0: i =1
Как я могу использовать следующее значение списка для заполнения нового столбца, где флаг = 1?
Кажется, i = 1 не работает.
Ответ №1:
Давайте попробуем
l = [0,1,2,3,6,7,9,10]
df['New']=''
df.loc[df.flag==1,'New']=l
df
Out[80]:
context flag New
0 0 1 0
1 0 1 1
2 0 0
3 2 1 2
4 2 1 3
5 2 1 6
6 2 1 7
7 2 0
8 4 1 9
9 4 1 10
10 4 0
Комментарии:
1. Спасибо! сработало как по волшебству. Не знал, как использовать df.loc в pandas.