将包含许多数据帧的字典转换为数据帧

时间:2018-01-26 12:56:05

标签: python pandas dictionary dataframe time-series

我有一个来自Influxdb时间序列数据库的字典。该字典包括许多键,如KEY1,KEY2 ......所有键对应于表格数据集。举个例子:

dict = { KEY1:     MAX      MIN  
         Date1     max1     min1
         Date2     max2     min2,

         KEY2:     MAX      MIN  
         Date1     max3     min3
         Date2     max4     min4}

我想要的是一个数据框,如:

KEYS     DATES      MAX         MIN
KEY1     Date1      max1        min1
KEY1     Date2      max2        min2
KEY2     Date1      max3        min3
KEY2     Date2      max4        min4

我希望它足够清楚。

2 个答案:

答案 0 :(得分:0)

只需为每个数据框和key添加concat属性,如下所示:

import pandas as pd

d = {'k1': pd.DataFrame({'max': [1, 2, 3], 'min': [1, 2, 3]}, index=[0, 1, 2]),
     'k2': pd.DataFrame({'max': [4, 5, 6], 'min': [4, 5, 6]}, index=[3, 4, 5])}

for k in d:
    d[k].insert(0, 'key', [k]*len(d[k]))

res = pd.concat(d.values())
print(res)

打印出来

  key  max  min
0  k1    1    1
1  k1    2    2
2  k1    3    3
3  k2    4    4
4  k2    5    5
5  k2    6    6

n.b。如果跨数据帧重复索引,这也有效:

  key  max  min
0  k1    1    1
1  k1    2    2
2  k1    3    3
0  k2    4    4
1  k2    5    5
2  k2    6    6

答案 1 :(得分:-1)

您可以使用functools包中的reduce函数。 functools包通常附带Python的标准安装。所以,你可以这样写:

from functools import reduce

for key in dict.keys():
    dict[key]["KEYS"] = key

combined = reduce(lambda x,y: x.append(y), dict.values())

首先,您浏览每个数据框,并创建" KEYS"柱。然后, reduce函数将遍历字典中的数据帧,一次将两个数据帧组合成一个数据帧,然后将该结果与下一个数据帧组合,依此类推,直到它遍历所有数据帧为止。词典。

这将存储在结果变量中。

看起来DATES是dict中每个数据框的索引,所以如果是这样,你可以添加:

combined["DATES"] = combined.index.tolist()

如果需要,您可以重新排列列:

combined = combined[["KEYS", "DATES", "MAX", "MIN"]]

如果适合您,请告诉我。