当时间信息分为列和索引时,将数据帧重塑为时间序列?

问题描述 投票:0回答:1

下面的数据框跟踪参数

"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

您能否建议我如何引用分割的数据帧,而无需手动编写它们的名称(有很多年)来转置它们并按照与以前相同的顺序合并。

python pandas group-by time-series pivot-table
1个回答
0
投票

您提出的策略看起来不必要地复杂,因为这只是数据框的“重塑”。 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

1。将 

'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 的另一个问题。

© www.soinside.com 2019 - 2024. All rights reserved.