如何使用Python/Pandas或Excel将行转换为日历绩效表?

olhwl3o2  于 2023-03-31  发布在  Python
关注(0)|答案(3)|浏览(149)

我有两列,分别是几年前的日期和业绩回报,数据是csv格式的,如下所示:

Date: Return

12/2022: -1%

11/2022: +2%

10/2022: +1%

...

1/2002: -1%

我想把它转换成一个更传统的绩效表/矩阵,每年一行,每月一列,最终结果如下:

Year     Jan, Feb, Mar, ..., Dec

2022 -1%, +1%, +2%, ..., -1%

2021 -1%, +1%, +2%, ..., -1%

...

2002 -1%, +1%, +2%, ..., -1%

请指示。
谢谢

njthzxwz

njthzxwz1#

要使用Python/Pandas将一行转换为日历绩效表格,您可以使用以下步骤:
首先,导入所需的库:复制代码**import pandas pd将数据加载到Pandas DataFrame中。例如,如果数据位于名为“data.csv”的CSV文件中,则可以使用以下代码将其加载到DataFrame中:**复制代码df = pd.read_csv(“data.csv”)选择要转换为日历绩效表的行。例如,如果要选择第一行,则可以使用以下代码:复制代码row = df.iloc[0]为日历绩效表创建一个新的DataFrame,其中包含日期、绩效值和任何其他相关数据列。例如:复制代码calendar_df = pd.DataFrame(columns=['date','performance'])迭代选定行中的元素,并为每个元素向日历DataFrame添加一行。例如:复制i的代码,枚举中的值(行):calendar_df =日历_df.append({'日期':i.“性能”:value},ignore_index=True)如果数据包含日期而不是数字索引,则可以使用日期列设置日历DataFrame的索引,然后使用unstack方法将日历DataFrame转换为每个日期一列的表格:复制代码calendar_df.set_index('date',inplace=True)calendar_table = calendar_df.unstack()要使用Excel将行转换为日历绩效表格,您可以使用以下步骤:
在Excel中打开包含数据的电子表格。
选择要转换为日历绩效表的行。
单击“插入”选项卡,然后单击“表格”组中的“表格”按钮。
在“创建表格”对话框中,确保选中了包含数据的单元格区域,然后单击“确定”。
Excel将创建一个表,其中选定行中的每个元素各占一行,日期和绩效值各占一列。
如果您的数据包括日期而不是数字索引,您可以使用“设计”选项卡将第一列的名称更改为“日期”,然后使用“表”组中的“数据透视表”按钮创建每个日期一列的数据透视表。

9q78igpj

9q78igpj2#

你可以这样使用Pandas:

# simulate csv file // only for copy paste example required
from io import StringIO
csv = StringIO(
"""Date:Return
12/2022:-1%
11/2022:+2%
10/2022:+1%"""
)

实际代码:

# load tabular data, use filepath instead of 'csv' to load from disk
import pandas as pd
df = pd.read_csv(csv, sep=':')

# str date to datetime object to access year, month, etc.
df['Date'] = pd.to_datetime(df['Date'])
# string to float
df['Return'] = df['Return'].str.strip('%').astype(float) /100

# aggregate data as pivot table
import numpy as np
out = pd.pivot_table(df, values='Return', index=df['Date'].dt.year, columns=df['Date'].dt.month, aggfunc=np.sum)
print(out)

输出:

Date    10    11    12
Date                  
2022  0.01  0.02 -0.01
exdqitrt

exdqitrt3#

这里有一种方法:

df[['year','month']] = pd.to_datetime(df['date']).dt.strftime('%Y-%b').str.split('-', expand=True)
df = df.pivot(index='year', columns=['month'], values=['return'])

输出:

month    Dec  Jan  Nov  Oct
year                       
2002     NaN  -2%  NaN  NaN
2022     -1%  NaN   1%   0%

相关问题