2

我想转:

DateTime                     ColumnName        Min      Avg      Max                                                                                      
2012-10-14 11:29:23.810000   Percent_Used       24       24       24
2012-10-14 11:29:23.810000   Current_Count  254503   254503   254503
2012-10-14 11:29:23.810000   Max           1048576  1048576  1048576
2012-10-14 11:34:23.813000   Percent_Used       24       24       24
2012-10-14 11:34:23.813000   Current_Count  254116   254116   254116
2012-10-14 11:34:23.813000   Max           1048576  1048576  1048576

进入 DateTimes 唯一的数据框(索引)并且列是:

DataTime, Percent_Used_Min, Percent_Used_Avg, Percent_Used_Max, Current_Count_Min, Current_Count_Avg, Current_Count_Max, Max_Min, Max_Avg, Max_Max

基本上,我想在不涉及分层索引或堆叠数据帧的情况下模仿 R 的熔化/铸造。我似乎无法准确地使用 stack/unstack、melt 或 pivot/pivot_table 进行上述操作——有没有好的方法来做到这一点?

作为一个例子,在 R 中它会是这样的:

dynamic_melt = melt(dynamic, id = c("DateTime", "ColumnName"))
recast = data.frame(cast(dynamic_melt, DateTime ~ ...))

上述数据将是可变的(即 ColumnName 的值并不总是相同的,它们可能或多或少,并且名称不同)。

4

1 回答 1

7

有一个meltpandas.core.reshape

In [52]: melted = reshape.melt(df, id_vars=['DateTime', 'ColumnName'])

In [53]: melted.set_index(['DateTime', 'ColumnName', 'variable']).value.unstack([1, 2])
Out[53]: 
ColumnName                  Percent_Used  Current_Count      Max  Percent_Used  Current_Count      Max  Percent_Used  Current_Count      Max
variable                             Min            Min      Min           Avg            Avg      Avg           Max            Max      Max
DateTime                                                                                                                                    
2012-10-14 11:29:23.810000            24         254503  1048576            24         254503  1048576            24         254503  1048576
2012-10-14 11:34:23.813000            24         254116  1048576            24         254116  1048576            24         254116  1048576

这些列最终成为 MultiIndex,但如果这对您来说是一个交易破坏者,只需连接名称并使其成为常规索引。

于 2012-10-22T00:42:23.627 回答