#python #pandas #loops
#python #pandas #циклы
Вопрос:
Я пытаюсь добавить столбец для плотности в dataframe, который вычисляется по показанному уравнению. Мне нужно, чтобы ссылочная плотность изменялась в определенной строке (строка 66). Я попробовал два цикла for и цикл for / else, и каждый из них использует одну из плотностей для каждой строки, а не переключается, как я намереваюсь. Я определил все переменные и не получаю никаких ошибок.
Попытка #1
for index, row in tem80df[tem80df['DREF'] <= 66].iterrows():
density80 = density_crust * (1-(alpha * tem80df['TREF']))
for index, row in tem80df[tem80df['DREF'] > 66].iterrows():
density80= density_mantle * (1- (alpha *tem80df['TREF']))
Попытка #2
for index, row in tem80df[tem80df['DREF'] <= 66].iterrows():
density80 = density_crust * (1-(alpha * tem80df['TREF']))
else:
density80 = density_mantle * (1 - (alpha* tem80df['TREF']))
‘DREF’ и ‘TREF’ — это имена столбцов. ‘DREF’ — это первый столбец.
Помощь будет оценена!
Ответ №1:
density_list = []
TR = <index of column TREF>
# get row count and loop through number of rows in dataframe
for i in range(0,tem80df.shape[0]):
if i<=66:
density80 = density_crust * (1-(alpha * tem80df.iloc[i:TR]))
density_list.append(density80)
else:
density80= density_mantle * (1- (alpha *tem80df.iloc[i:TR]))
density_list.append(density80)
tem80df['Density'] = density_list
TR — это индекс столбца TREF, начиная с первого столбца = 0.
Комментарии:
1. Спасибо! К сожалению, все еще сталкиваюсь с некоторыми проблемами. Если я попробую TR = <индекс столбца TREF>, я получаю синтаксическую ошибку, от которой я не могу избавиться. Если я заменяю TR в коде на ‘TREF’, я получаю «невозможно выполнить индексацию фрагментов в<class’pand.core.indexes.numeric.Int64Index’> с помощью этих индексаторов [TREF] из <class ‘str’> . Ранее я назначил ‘TREF’ в качестве значения с плавающей точкой, используя .astype.
2. вы пробовали устанавливать TR равным номеру TREF столбца? TR должно быть целым числом.. итак, если у вас, например, 3 столбца, индекс 3-го столбца будет = 2. Если это не сработает, попробуйте опубликовать ошибки, чтобы мы могли точно видеть, с чем вы столкнулись.