#python #pandas
#python #pandas
Вопрос:
Я пытаюсь получить доступ к значениям столбцов в одном фрейме данных, скажем new_df
, соответствующим индексу i в другом df (скажем, df1)
new_df выглядит примерно так:
Id 100120 100142 118365 269946 621382
2018-12-31 0 0 0 0 0
2019-01-31 0 40 0 0 0
2019-02-28 16 48 0 0 0
и df1:
0 100121 high not_seasonal trending
1 100140 high not_seasonal trending
2 118360 high seasonal not_trending
Я знаю, что это можно легко сделать следующим образом:
for i in df1.index:
new_df.iloc[:,i].values
который возвращает массив, подобный выводу всех столбцов, содержащихся в i столбце
примера new_df для столбца 1
gogo [ 0 40 48 ]
Однако проблема заключается в доступе к столбцу i нового df в функции, где i передается в качестве параметра
пример:
def timeseriesCVscore(i):
errors = []
values = df1.loc[new_df.iloc[:,i]].values
.....
и
def timeseriesCVscore(i):
errors = []
for i in seasonal_profile_df.index:
values = new_df.iloc[:,i].values
оба выдают одну и ту же ошибку:
KeyError: "Passing list-likes to .loc or [] with any missing labels is no longer supported. The following labels were missing: Int64Index([40, 48], dtype='int64')
Моя структура кода следующая, чтобы автоматически перебирать i в new_df
for in df1:
return timeseriesCVscore(i)
и получите вывод массива, содержащего все значения i столбца.
Я не могу найти способ обойти внутри функции, любая помощь будет признательна
ОБНОВЛЕНИЕ: проверка внутри функции
for f in seasonal_profile_df.index:
values = np.where((seasonal_profile_df.index[f] == i), new_df.loc[:,i].values, 0)
выдает следующую ошибку:
KeyError: "None of [Int64Index([0, 0, 16], dtype='int64', name='Id')] are in the [columns]"
Ответ №1:
Что касается вашего кода:
def timeseriesCVscore(i):
errors = []
values = df1.loc[new_df.iloc[:,i]].values
в случае i = 1 результаты «new_df.iloc[:,1]» являются:
Id
2018-12-31 0
2019-01-31 40
2019-02-28 48
Name: 100142, dtype: int64
итак, 0, 40 и 48 использовались в качестве меток для df1, как если бы:
df1.loc([0,40,48])
Но в df1 нет ни метки 40, ни 48, как вы найдете в конце сообщения об ошибке
The following labels were missing: Int64Index([40, 48], dtype='int64')
Комментарии:
1. Привет, Нур! да, я понимаю, поэтому, как я могу получить доступ к этому массиву данных из индекса
2. вы можете получить к ним доступ с помощью своего кода без изменений, если df1 имеет метки at 40, 48 строк, если df1 имеет 49 строк