在熊猫中转置数据

时间:2020-08-12 13:17:38

标签: excel pandas python-3.5 transpose

我有一个excel文件,该文件包含一个零件在其使用寿命中已使用了多少次。当前,数据以序列号位于A列中的方式存储,每个“寿命”计数均以“ Date”值作为标题存储在相邻的列中。
这是一个示例:

Image1

我希望能够枢转/转置Python中的所有Date列,以便输出格式为Lifespan Count作为名为“ Count”的新列的以下格式:

Image2

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

因此,有没有办法我可以通过加载的电子表格来选择我已加载到数据框中的所有列,以便能够如上所述对数据进行透视/转置?

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

1 个答案:

答案 0 :(得分:0)

如果您已命名列系列并且行上带有set_index(),则可以简单地使用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

示例输出

type Subscriptions = {
  [key: string]: Array<()=>void>
}