Назначить несколько значений из списка по порядку для нескольких строк в datafame - PullRequest
0 голосов
/ 27 июня 2018

Проще говоря, у меня есть список abc, с abc=[a,b,c,d,e].

Я хочу назначить эти значения для столбца «Текст» в DF информационного кадра, который имеет значение в столбце «Число» = 2. Я знаю, что в информационном кадре есть 5 строк, которые удовлетворяют этому условию, например, строки 1, 2,3 , 4 5. То, что я хочу, это значение в строке1 = a, строке2 = b, строке3 = c, строке4 = d, строке5 = e Я пишу код так:

 i=0
 for row1 in range(0,len(df)):
     if  df.iloc[row1]['Number']==2:
        df.set_value(df.index[row1], 'Text',abc[i])
        i=i+1

Но то, что я получаю, это значение в строке 1,2,3,4 5, которое получит то же значение e. Ребята, не могли бы вы дать мне способ сделать это. Большое спасибо

1 Ответ

0 голосов
/ 27 июня 2018

Не изменяя слишком много вашего кода, я смог использовать функцию enumerate () вместо вашего цикла i. Я использую Python 3.

import pandas as pd 
import numpy as np 
# create sample dataframe
abc = ['a','b','c','d','e', 'f']
data = {'Text':['foo', 'bar', 'spam', 'eggs', 'ham', 'asdf'],
        'Number':[2, 2, 5, 2, 2, 3]}
df = pd.DataFrame.from_dict(data) 
df = df[['Text', 'Number']] # reordering df
print(df)

# Original question code:
# i=0
# for row1 in range(0,len(df)):
#     if df.iloc[row1]['Number']==2:
#         df.set_value(df.index[row1], 'Text',abc[i])
#         i=i+1

# Pseudocode: 
# if row value for the column 'number' is 2:
#     set the value for the column 'text' at an index to the value for abc[index]
for idx, row1 in enumerate(range(0, len(df))):
    if df.iloc[row1]['Number'] == 2:
        df.set_value(df.index[row1], 'Text', abc[idx])
print(df)

Обратите внимание, что set_value устарела и будет удалена в следующем выпуске.

Результаты:

    text  number
0     a       2
1     b       2
2  spam       5
3     d       2
4     e       2
5  asdf       3

FutureWarning: set_value is deprecated and will be removed in a future release. Please use .at[] or .iat[] accessors instead
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...