#python-3.x #pandas #dataframe
#python-3.x #pandas #фрейм данных
Вопрос:
Предполагая, что фрейм данных выглядит df
следующим образом:
ISIN Coupon Issue Date Maturity Date Jan 18th Jan 19th
0 CA135087A610 0.0150 7/30/2012 6/1/2023 103.13 103.14
1 CA135087F254 0.0075 10/19/2015 3/1/2021 100.08 100.08
2 CA135087F585 0.0075 4/11/2016 9/1/2021 100.40 100.40
3 CA135087G328 0.0050 10/11/2016 3/1/2022 100.44 100.43
4 CA135087H490 0.0175 10/6/2017 3/1/2023 103.29 130.29
5 CA135087ZU15 0.0275 8/2/2011 6/1/2022 103.61 103.60
6 CA135087J546 0.0225 10/5/2018 3/1/2024 106.21 106.21
7 CA135087J967 0.0150 4/5/2019 9/1/2024 104.27 104.28
8 CA135087K528 0.0125 10/11/2019 3/1/2025 103.60 103.60
9 CA135087K940 0.0050 4/3/2020 9/1/2025 100.33 100.32
10 CA135087L518 0.0025 10/9/2020 3/1/2026 98.78 98.77
Jan 20th
0 103.10
1 100.08
2 100.39
3 100.41
4 103.25
5 103.57
6 106.17
7 104.25
8 103.59
9 100.30
10 98.76
Мне нужно разделить его на 3 вложенных фрейма данных на основе общих столбцов ISIN
, Coupon
, Issue Date
, Maturity Date
.
common_columns = ['ISIN', 'Coupon', 'Issue Date', 'Maturity Date']
df1.columns = common_columns 'Jan 18th'
df2.columns = common_columns 'Jan 19th'
df3.columns = common_columns 'Jan 20th'
Затем сохраните их в файле Excel с Jan 18th
Jan 19th
именем листа и Jan 20th
. Пожалуйста, обратите внимание, что в реальных данных есть другие столбцы даты Jan 21th
, и т.д. Jan 22th
Чтобы сохранить фреймы данных:
writer = pd.ExcelWriter('data.xlsx')
df1.to_excel(writer, 'Jan 18th')
df2.to_excel(writer, 'Jan 19th')
df3.to_excel(writer, 'Jan 20th')
writer.save()
Как я мог это сделать в Python? Спасибо.
Обновить:
Для ISIN
замены первого листа на 2021-01-18
, 18 января на Close Price
, ISIN
замена второго листа на 2021-01-19
, 19 января на Close Price
, ISIN
замена третьего листа на 2021-01-20
, 20 января на Close Price
.
Ответ №1:
Давайте используем index.difference
для получения столбцов, похожих на дату, путем удаления comm_columns
из фрейма данных, затем для каждого столбца, похожего на дату, используйте DataFrame.to_excel
вместе с pd.ExcelWriter
для создания листов:
comm_cols = ['ISIN', 'Coupon', 'Issue Date', 'Maturity Date']
date_cols = df.columns.difference(comm_cols)
with pd.ExcelWriter('data.xlsx') as writer:
for col in date_cols:
sub_df = df[comm_cols [col]]
sub_df.to_excel(writer, sheet_name=col)
writer.save()
ОБНОВЛЕНИЕ: для rename
столбца ISIN
при сохранении листа используйте:
comm_cols = ['ISIN', 'Coupon', 'Issue Date', 'Maturity Date']
isin_cols = ['2021-01-18', '2021-02-18', '2021-02-19']
date_cols = df.columns.difference(comm_cols)
with pd.ExcelWriter('data.xlsx') as writer:
for col, isin_col in zip(date_cols, isin_cols):
sub_df = df[comm_cols [col]].rename(columns={'ISIN': isin_col})
sub_df.to_excel(writer, sheet_name=col)
writer.save()
Комментарии:
1. Спасибо, возможно ли изменить столбцы каждого вложенного фрейма данных с
'2021-01-18', 'Coupon', 'Issue Date', 'Maturity Date', 'Close Price'
'2021-01-19', 'Coupon', 'Issue Date', 'Maturity Date', 'Close Price'
df2
помощью for df1, for и т.д. перед сохранением в Excel?2. Это означает, что мне нужно переименовать
ISIN
с2021-01-18, etc
помощью иJan 18th
переименовать с помощьюClose Price
fordf1
.3. Отлично, не могли бы вы добавить код для этого?
4. @ahbon Можете ли вы предоставить список новых имен, которые должны быть отображены в столбце ISIN?
5. @ahbon обновил ответ в соответствии с вашими требованиями.