Как создать эффективную функцию для заполнения factor (t 1) в Python

#python #loops

#python #циклы

Вопрос:

Я изо всех сил пытаюсь создать эффективную функцию в Python для заполнения нового столбца (т. Е. factor (t 1)) с factor для того же id_policy, но каждый раз увеличиваю t на 1. Может кто-нибудь помочь, пожалуйста?

Заранее большое спасибо.

введите описание изображения здесь

Комментарии:

1. Вы добавили python тег, но не добавили код к своему вопросу.

Ответ №1:

Вопрос зависит от того, используете ли вы какие-либо дополнительные библиотеки, такие как pandas , numpy или scipy .

Если вы хотите сделать это с помощью чистого python, вот способ, которым вы могли бы это сделать

 factors = [0.332, 0.28, 0.225, 0.166]
factors_shifted = [0, 0, 0, 0] 

factors_shifted[:-1] = factors[1:]
 

если вам нужна универсальная функция, которая могла бы это сделать:

 def shift_factors(factors, n, fillvalue=0): 
    new_factors = [fillvalue] * len(factors)
    new_factors[:-n] = factors[n:] 
    return new_factors


new_factors = shift_factors([0.332, 0.28, 0.225, 0.116], 1)
 

Если что-либо из вышеперечисленного неясно, я предлагаю вам ознакомиться со следующим:
https://realpython.com/lessons/indexing-and-slicing /


Обновить

учитывая условия, самым id_policy простым способом достижения этого было бы использование pandas библиотеки

 import pandas as pd

df = pd.DataFrame(
        data = dict(
        id_policy=['PL0', 'PL1', 'PL1', 'PL0', 'PL0', 'PL1', 'PL0', 'PL1'],
        year=[1, 1, 2, 2, 3, 3, 4, 4],
        factor=[0.33, 0.196, 0.135, 0.28, 0.225, 0.087, 0.166, 0.036]
    )
)

# ensure data is sorted by year
df = df.sort_values(by='year')

# this will shift all the values for each id policy by one to the left 
# NaNs are created when there are missing values, so we just fill these with 0
df['factor(t 1)'] = df.groupby('id_policy')['factor'].shift(-1).fillna(0) 
 

Комментарии:

1. Спасибо за ваш ответ, данные, которые я вставил выше, вероятно, вводят в заблуждение, но сейчас я обновил. Это также должно быть при условии того же id_policy, не думайте, что вышеприведенное сработает.

2. У вас есть доступ к дополнительным библиотекам, таким как pandas ?

3. да, у меня есть, с удовольствием установлю другие библиотеки, если это необходимо