Панды, добавляющие дополнительные значения между двумя значениями строк в фрейме данных с ограничением числа

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

У меня есть фрейм данных. Под тем же индексом у меня есть «early_date» и «latest_date», которые находятся в dtype «int». Я хочу создать дополнительные значения между значениями строк «early_date» и «latest_date». Кстати, я хочу сложить сгенерированные значения в новые строки между ними.

Вот как я это сделал,

 df = pd.DataFrame({'index': [1,1,2,2,3,3],
                   'variable': ['early_date', 'late_date']*3,
                   'value': [201952,202001,202002,202004,202006,202012]})

# This is what your data looks like unmelted
df_p = df.pivot('index', 'variable', 'value').reset_index()
df_p.columns.name = ''

df_p['new'] = [list(range(x,y 1)) for x, y in zip(df_p.pop('early_date'), df_p.pop('late_date'))]
 

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

В столбце «новый» заполнение между «201952» и «202001» в индексе 1 стало 201952, 201953, 201954…201999, 202001.

Однако, поскольку столбец «new» фактически представляет год и недели. В случае индекса 1 он не должен заполнять ничего между 201952 и 202001, и результат должен быть [201952, 202001]. Поскольку 52-я неделя — это конец года.

Что я могу сделать для обработки этих случаев?

Ответ №1:

IIUC, вы можете добавить условие в свой цикл for:

 df_p['new'] = [list(range(x,y 1)) if str(x)[-2:]!='52' else [x,y] 
              for x, y in zip(df_p.pop('early_date'), df_p.pop('late_date'))]
 

 print(df_p)

   index                                                new
0      1                                   [201952, 202001]
1      2                           [202002, 202003, 202004]
2      3  [202006, 202007, 202008, 202009, 202010, 20201...
 

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

1. большое вам спасибо, кстати, что означает IIUC?

2. @kelvin.aaa2 Рад узнать, что это сработало. Это означает «Если я правильно понимаю» 🙂