我对Python的数据分析非常陌生,我的任务是重新组织一个自动生成的csv文件,在该文件中,四家公司的能源消耗(以兆瓦为单位(将在2022年7月进行监测。从7月1日(00:15(到7月31日(23:45(,这些公司每15分钟报告一次能耗。这就是原始数据帧的样子:
索引 | 日期 | 季度 | 公司 | Mw|
---|---|---|---|---|
1 | 2022年7月1日 | 00:15 | 公司A||
2 | 2022年7月1日 | 00:15 | 公司B||
3 | 2022年7月1日 | 00:15 | 公司C10 | |
4 | 2022年7月1日 | |||
1 | 2022年7月1日 | 00:30 | 公司A||
2 | 2022年7月1日 | 00:30 | 公司B||
3 | 2022年7月1日 | 00:30 | 公司C||
4 | 2022年7月1日 | |||
1 | 2022年7月1日 | 00:45 | 公司A | -130|
2 | 1022年7月1日 | 00:45 | 公司B120 | |
3 | 2022年7月1日 | 00:45 | 公司C||
4 | 2022年7月1日 | |||
1 | 2022年7月2日 | 00:15 | 公司A||
2022年7月2日 | 00:15 | 公司B | 0 | |
3 | 2022年7月2日 | 00:15 | 公司C160 | |
4 | 2022年7月2日 | 00:15 | 公司D||
1 | 2022年7月2日 | 00:30 | 公司A10 | |
2022年7月2日 | 00:30 | 公司B | 0 | |
3 | 2022年7月2日 | 00:30 | 公司C | -145|
4 | 2022年7月2日 | 00:30 | 公司D||
1 | 2022年7月2日 | 00:45 | 公司A-180||
2022年7月2日 | 00:45 | 公司B | 115 | |
3 | 2022年7月2日 | 00:45 | 公司C145 | |
4 | 2022年7月2日 | 00:45 | 公司D||
我将pivot_table应用于数据帧,其中索引为"Company"、"Date"和值"Mw"。列是从"Quarter"行创建的。在接收到的数据中,使用reset_index((重置索引。数据如下:
Quarter Date Company 00:15 00:30 00:45
0 01.07.2022 Company A 0 0 -130
1 01.07.2022 Company B 0 0 120
2 01.07.2022 Company C 10 1 110
3 01.07.2022 Company D 15 150 0
4 02.07.2022 Company A 0 10 -180
5 02.07.2022 Company B 0 0 115
6 02.07.2022 Company C 160 -145 145
7 02.07.2022 Company D 180 150 0
为了按照您的示例排序,使用了sort_values(by='Date'(。删除索引名称:
df1.rename_axis(None, axis=1, inplace=True)
索引设置为从0到n。
接下来,在列表生成器中,创建所需列的名称并对其进行重命名。总之:
import pandas as pd
import numpy as np
df = pd.read_csv('df2.csv', header=0)
df1 = df.pivot_table(index=['Date', 'Company'], columns='Quarter', values='Mw')
df1 = df1.reset_index().sort_values(by='Date')
df1.rename_axis(None, axis=1, inplace=True)
df1 = df1.set_index(np.arange(0, len(df1)))
hist = len(df1.columns)
arr = ['00:00' + '-' + str(df1.columns[2])]
[arr.append(df1.columns[i - 1] + '-' + df1.columns[i]) for i in range(3, hist)]
df1.columns.values[2:] = arr#Renaming columns
print(df1)
输出
Date Company 00:00-00:15 00:15-00:30 00:30-00:45
0 01.07.2022 Company A 0 0 -130
1 01.07.2022 Company B 0 0 120
2 01.07.2022 Company C 10 1 110
3 01.07.2022 Company D 15 150 0
4 02.07.2022 Company A 0 10 -180
5 02.07.2022 Company B 0 0 115
6 02.07.2022 Company C 160 -145 145
7 02.07.2022 Company D 180 150 0