Как использовать два цикла for для копирования переменной списка в переменную местоположения в кадре данных? - PullRequest
0 голосов
/ 16 мая 2019

У меня есть dataframe, который имеет 2 столбца с именем locStuff и data. Кто-то был достаточно любезен, чтобы показать мне, как индексировать диапазон местоположения в df, чтобы он правильно изменял данные на одно целое число, присоединенное к locStuff вместо индекса dataframe, который работает нормально, теперь я не вижу, как изменить значения данных этого диапазона местоположения со списком значений.

import pandas as pd


INDEX = list(range(1, 11))
LOCATIONS = [3, 10, 6, 2, 9, 1, 7, 5, 8, 4]
DATA = [94, 43, 85, 10, 81, 57, 88, 11, 35, 86]
# Make dataframe
DF = pd.DataFrame(LOCATIONS, columns=['locStuff'], index=INDEX)
DF['data'] = pd.Series(DATA, index=INDEX)

# Location and new value inputs
LOC_TO_CHANGE = 8
NEW_LOC_VALUE = 999
NEW_LOC_VALUE = [999,666,333]


LOC_RANGE = list(range(3, 6))

DF.iloc[3:6, 1] = ('%03d' % NEW_LOC_VALUE)
print(DF)

#I TRIED BOTH OF THESE SEPARATELY
for i in NEW_LOC_VALUE:
    for j in LOC_RANGE:
        DF.iloc[j, 1] = ('%03d' % NEW_LOC_VALUE[i])


print (DF)

i=0
while i<len(NEW_LOC_VALUE):
    for j in LOC_RANGE:
        DF.iloc[j, 1] = ('%03d' % NEW_LOC_VALUE[i])
    i=+1

print(DF)

Ни одна из этих работ:

for i in NEW_LOC_VALUE:
    for j in LOC_RANGE:
        DF.iloc[j, 1] = ('%03d' % NEW_LOC_VALUE[i])


print (DF)

i=0
while i<len(NEW_LOC_VALUE):
    for j in LOC_RANGE:
        DF.iloc[j, 1] = ('%03d' % NEW_LOC_VALUE[i])
    i=+1

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

Ожидаемое поведение будет:

    locStuff data
1          3   999
2         10   43
3          6   85
4          2   10
5          9   81
6          1   57
7          7   88
8          5   333
9          8   35
10         4   666

1 Ответ

1 голос
/ 16 мая 2019

Попробуйте установить locStuff в качестве индекса, назначить значения и reset_index:

DF.set_index('locStuff', inplace=True)
DF.loc[LOC_RANGE, 'data'] = NEW_LOC_VALUE
DF.reset_index(inplace=True)

Выход:

    locStuff    data
0   3           999
1   10          43
2   6           85
3   2           10
4   9           81
5   1           57
6   7           88
7   5           333
8   8           35
9   4           666
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...