#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. да, у меня есть, с удовольствием установлю другие библиотеки, если это необходимо