下面的数据框跟踪参数
"rate"
、"pressure"
和 "cut"
的每日变化。日期信息分为一侧的列 'Months&year'
(2024 年 1 月、2023 年 12 月等),而天数 (1-31) 则构成数据帧的 index:
dataframe.head()
Month&Year parameter 1 2 3 .. 31
Jan 2024 rate 22 1 7 6
Jan 2024 pressure 67 8 8 8
Jan 2024 cut 2 67 7 2
Dec 2023 rate 8 9 1 0
Dec 2023 pressure 6 8 11 3
Dec 2023 cut 7 8 77 8
我寻求在一侧收集日期信息(
"day"
,"month&year"
),以便将数据帧重塑为时间序列,这样:
Month&Year parameter rate pressure cut
Jan 2024 1 22 67 2
Jan 2024 2 1 8 67
Jan 2024 3 7 8 7
..
Jan 2024 31 6 8 2
Dec 2023 1 8 6 7
Dec 2023 2 9 8 8
Dec 2023 3 1 11 77
..
Dec 2023 31 0 3 8
我想我需要使用 groupby 来将此数据帧拆分为多个数据帧,转置每个新数据集,然后再次合并它们。
这是我迄今为止所取得的成就,当我使用 groupby 并将此数据帧拆分为单独的数据帧时:
in:
mo=dataframe.groupby('Month&year')
dataframe_months=[mo.get_group(x) for x in mo.groups]
print ("result: \"n", dataframe_months)
out:
Month&Year parameter 1 2 3 .. 31
Jan 2024 rate 22 1 7 6
Jan 2024 pressure 67 8 8 8
Jan 2024 cut 2 67 7 2
Month&Year parameter 1 2 3 .. 31
Dec 2023 rate 8 9 1 0
Dec 2023 pressure 6 8 11 3
Dec 2023 cut 7 8 77 8
您能否建议我如何引用分割的数据帧,而无需手动编写它们的名称(有很多年)来转置它们并按照与以前相同的顺序合并。
您提出的策略看起来不必要地复杂,因为这只是数据框的“重塑”。 pandas 用户指南推荐了pivot_table:
为了清晰起见,重复输入数据
(跳过未公开的日子)
df = pd.DataFrame({'Month&Year': ['Jan 2024','Jan 2024','Jan 2024','Dec 2023','Dec 2023','Dec 2023'],
'parameter': ['rate', 'pressure', 'cut', 'rate', 'pressure', 'cut'],
1: [22, 67, 2, 8, 6, 7],
2: [1, 8, 67, 9, 8, 8],
3: [7, 8, 7, 1, 11, 77],
31: [6, 8, 2, 0, 3, 8]})
df
Month&Year parameter 1 2 3 31
0 Jan 2024 rate 22 1 7 6
1 Jan 2024 pressure 67 8 8 8
2 Jan 2024 cut 2 67 7 2
3 Dec 2023 rate 8 9 1 0
4 Dec 2023 pressure 6 8 11 3
5 Dec 2023 cut 7 8 77 8
'Month&Year'
和
days(1 到 31)旋转到同一侧 在这里,我们使用
'Month&Year'
pivot_table
交换为另一级列,然后转置 (T
),最后压平表格 (reset_index
)。dfp = pd.pivot_table(data = df,
values = [1,2,3,31],
columns = 'Month&Year',
index = 'parameter'
).T.reset_index()
parameter level_0 Month&Year cut pressure rate
0 1 Dec 2023 7 6 8
1 1 Jan 2024 2 67 22
2 2 Dec 2023 8 8 9
3 2 Jan 2024 67 8 1
4 3 Dec 2023 77 11 1
5 3 Jan 2024 7 8 7
6 31 Dec 2023 8 3 0
7 31 Jan 2024 2 8 6
2。索引和列的可读性的最后一步您所需的输出数据框显示
'parameter'
'Day'
。作为枢轴的结果,标签'parameter'
columns索引的名称,这也变得令人困惑。我们可以简单地删除该标签。
dfp = dfp.rename(columns = {'level_0' : 'Day'})
dfp.columns = dfp.columns.rename(None)
dfp
Day Month&Year cut pressure rate
0 1 Dec 2023 7 6 8
1 1 Jan 2024 2 67 22
2 2 Dec 2023 8 8 9
3 2 Jan 2024 67 8 1
4 3 Dec 2023 77 11 1
5 3 Jan 2024 7 8 7
6 31 Dec 2023 8 3 0
7 31 Jan 2024 2 8 6
按日期排序将是涉及 pandas.datetime 的另一个问题。