我有一个excel文件,该文件包含一个零件在其使用寿命中已使用了多少次。当前,数据以序列号位于A列中的方式存储,每个“寿命”计数均以“ Date”值作为标题存储在相邻的列中。
这是一个示例:
我希望能够枢转/转置Python中的所有Date列,以便输出格式为Lifespan Count作为名为“ Count”的新列的以下格式:
我尝试在pandas中使用数据透视功能翻转适当的行和列,但是问题是我必须一次定义每一列。本示例中使用的电子表格的性质只是我使用的所有电子表格中的一个,这些电子表格都在不同的日期开始(有些从01/01/2010开始呈现,而另一些从01/01/1999呈现)。值得注意的是,所有电子表格在每个月的第一天开始,并且每次增加1个月。
因此,有没有办法我可以通过加载的电子表格来选择我已加载到数据框中的所有列,以便能够如上所述对数据进行透视/转置?
pivot = df.pivot_table(index=['Serial'], values=['01/01/2019','01/02/2019',... etc], aggfunc='max'])
答案 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>
}