#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 Рад узнать, что это сработало. Это означает «Если я правильно понимаю» 🙂