#python #pandas
#python #pandas
Вопрос:
Я пытаюсь добавить новый столбец, вычисленный из первого квартиля всех столбцов. что-то вроде этого:
df['Q25']=df[col].apply(lambda x: np.percentile(x, 25) ,axis =1)
#col = ['1', '2','3',..'29'] days in one month
и это ошибка, которую я получаю:
KeyError: "['1' '2' '3' '4' '5' '6' '7' '8' '9' '10' '11' '12' '13' '14' '15' '16'n '17' '18' '19' '20' '21' '22' '23' '24' '25' '26' '27' '28' '29'] not in index"
Я понимаю, что ошибка показывает, что python пытается найти переданный список (col) в индексе вместо самих столбцов, но я не знаю, как мне это исправить. Я уже добавил axis= 1, но безуспешно.
PS. Я не могу добавить столбец вручную, например df['1'], df['2']
, поскольку общее число (в данном случае 29) изменяется в других случаях.
Комментарии:
1. Что такое
df.columns
?2. @NickilMaveli
Int64Index([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], dtype='int64', name='Day')
Ответ №1:
Попробуйте это :
df['Q25']= [np.percentile(df.loc[i,:], 25) for i in df.index]
Комментарии:
1. Спасибо за ответ, но он не работает: TypeError: unhashable тип: ‘slice’
2. Еще один момент: ваш код использует индекс (строки), в то время как я хочу рассмотреть столбцы. Я изменил ваш код на это:
df['Q25']= [np.percentile(df[:,i], 25) for i in map(lambda l : str(l), df.columns)]
и получил ту же ошибку :TypeError: unhashable type: 'slice'
3. Вы не можете добавить столбец к своему
df
размеру размеромdf.columns
. Это ничего не значит. Формы не совпадают. Возможно, вы захотите добавить новую строку …4. Еще раз спасибо, но и новый код (без изменения его для столбцов) приводит к той же ошибке
5. Мой плохой, я попробовал это снова, и это работает. Плохая новость (для меня!) Заключается в том, что для строк, содержащих NaN, значение Q25 равно NaN, но это другая проблема, и я попытаюсь ее найти. Большое спасибо за вашу помощь — и извините, что я не могу проголосовать за ваш ответ, моя репутация настолько низка из-за этого!