转置 Pandas 中的数据

Transposing Data in Pandas

我有一个 excel 文件,其中包含部件在其生命周期内使用次数的计数。当前数据的存储方式是序列号位于 A 列中,每个“寿命”计数存储在相邻列中,标题为“日期”值。
这是一个例子:

Image1

我希望能够 pivot/transpose Python 中的所有日期列,以便输出采用以下格式,并将寿命计数作为名为“计数”的新列:

Image2

我尝试使用 pandas 中的数据透视函数来翻转适当的行和列,但问题是我必须一次定义每一列。本示例中使用的电子表格的性质只是我使用的几个电子表格之一,它们都从不同的日期开始(有些从 01/01/2010 开始到现在,而另一些从 01/01/1999 开始到现在)。值得注意的是,所有电子表格都从每个月的第一天开始,每次递增 1 个月。

因此,有没有一种方法可以 select 我通过加载的电子表格加载到 Dataframe 中的所有列,以便能够 Pivot/Transpose 提到的数据?

pivot = df.pivot_table(index=['Serial'], values=['01/01/2019','01/02/2019',... etc], aggfunc='max'])

如果您命名您的列系列并且在您的行上有set_index(),则简单使用stack()

import datetime as dt
import random
df = pd.DataFrame({**{"Serial":[s for s in range(1111,1121)]}, 
 **{d:[random.randint(0,150) for i in range(10)] for d in pd.date_range(start=dt.date(2019,1,1), end=dt.date(2019,1,6))}
}).set_index("Serial")
df.columns.set_names("Date", inplace=True)
dfs = df.stack().to_frame().rename(columns={0:"Count"})

print(f"{df.iloc[:,:3].to_string()}\n\n{dfs.iloc[:10].to_string()}")

示例输出

Date    2019-01-01 00:00:00  2019-01-02 00:00:00  2019-01-03 00:00:00
Serial                                                               
1111                    134                   76                    8
1112                    115                   37                    8
1113                     16                   23                  130
1114                    108                   45                   69
1115                      0                   51                  111
1116                     51                   71                  101
1117                    107                   10                  142
1118                     80                   48                  134
1119                    148                   62                   75
1120                      4                  135                  100

                            Count
Serial Date                      
1111   2019-01-01 00:00:00    134
       2019-01-02 00:00:00     76
       2019-01-03 00:00:00      8
       2019-01-04 00:00:00     16
       2019-01-05 00:00:00    140
       2019-01-06 00:00:00     28
1112   2019-01-01 00:00:00    115
       2019-01-02 00:00:00     37
       2019-01-03 00:00:00      8
       2019-01-04 00:00:00     56