我有一个来自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
我希望它足够清楚。
答案 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"]]
如果适合您,请告诉我。