Другое уравнение, применяемое к определенным строкам в фрейме данных

#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. Если это не сработает, попробуйте опубликовать ошибки, чтобы мы могли точно видеть, с чем вы столкнулись.