如何将时间序列数据集转换为熊猫数据框

时间:2019-07-22 08:08:06

标签: pandas

我有以下四个列表,其中每个node都有6个时间序列值,这些值基于2001-2006年的年份排序(即200120022003200420052006)。

mylist1 = [['node1', 3.2, 4.5, 6.8, 7.6, 8.8, 9.6], ['node2', 6.2, 9.5, 2.8, 8.6, 1.8, 8.6]]

mylist2 = [['node1', 3, 4, 6, 7, 8, 9], ['node2', 6, 9, 2, 8, 1, 8]]

mylist3 = [['node1', 3.6, 4.2, 6.6, 7.8, 8.9, 9.5], ['node2', 6.8, 9.9, 2.5, 8.2, 1.6, 8.2]]

mylist4 = [['node1', 2, 5, 8, 6, 8, 6], ['node2', 2, 5, 8, 6, 8, 6]]

我想将上述4个列表转换为以下熊猫数据框。

id     year    mylist1  mylist2  mylist3  mylist4
node1  2001    3.2      3        3.6       2
node1  2002    4.5      4        4.2       5
node1  2003    6.8      6        6.6       8
node1  2004    7.6      7        7.8       6
node1  2005    8.8      8        8.9       8
node1  2006    9.6      9        9.5       6
node2  2001    6.2      6        6.8       2
node2  2002    9.5      9        9.9       5
node2  2003    2.8      2        2.5       8
node2  2004    8.6      8        8.2       6
node2  2005    1.8      1        1.6       8
node2  2006    8.6      8        8.2       6 

我将列表如下转换为熊猫数据框。

df1 = pd.DataFrame(list(mylist1))
df2 = pd.DataFrame(list(mylist2))
df3 = pd.DataFrame(list(mylist3))
df4 = pd.DataFrame(list(mylist4))

但是,我不确定如何连接这些数据帧以获得如上所述的时间序列垂直对齐。

很高兴在需要时提供更多详细信息。

3 个答案:

答案 0 :(得分:2)

尝试:

this.gridApi.getModel().doFilter = function (changedPath) {
  changedPath.forEachChangedNodeDepthFirst((rowNode) => {
    rowNode.childrenAfterFilter = rowNode.childrenAfterGroup;
    rowNode.setAllChildrenCount(null);
  }, true);
};
this.gridApi.getModel().doSort = function () {
  this.rootNode.childrenAfterSort = this.rootNode.childrenAfterFilter.slice(0);
};

结果如下:

from functools  import reduce
lists = [mylist1, mylist2, mylist3, mylist4]
dfs = [pd.DataFrame(mylist).melt(id_vars = [0]).loc[:,[0, 'value']].rename(columns = \
                                    {"value":'mylist{}'.format(i+1), 0:'id'}) \
                                   for i, mylist in enumerate(lists)]
df_final = reduce(lambda left,right: pd.merge(left,right.pop(right.columns[1]).to_frame(),\
                                             left_index= True, right_index = True), dfs)
df_final = df_final.sort_values('id').reset_index(drop = True)

您可以随后通过以下操作添加年份:

    id  mylist1 mylist2 mylist3 mylist4
0   node1   3.2 3   3.6 2
2   node1   4.5 4   4.2 5
4   node1   6.8 6   6.6 8
6   node1   7.6 7   7.8 6
8   node1   8.8 8   8.9 8
10  node1   9.6 9   9.5 6
1   node2   6.2 6   6.8 2
3   node2   9.5 9   9.9 5
5   node2   2.8 2   2.5 8
7   node2   8.6 8   8.2 6
9   node2   1.8 1   1.6 8
11  node2   8.6 8   8.2 6

答案 1 :(得分:2)

我将MultiIndex用于索引。从每个mylistnode的名称创建多索引。使用所有mylist的concat创建一个数据框,并将索引分配为multiindex。最后,取消堆栈,删除不需要的列,转置,sort_index并删除不需要的索引级别:

l1 = ['mylist1','mylist2','mylist3','mylist4']
l2 = ['node1', 'node2']
idx = pd.MultiIndex.from_product([l1, l2])

(pd.DataFrame(mylist1+mylist2+mylist3+mylist4, index=idx).drop(0,1).unstack().T 
            .sort_index(level=1).droplevel(0))
Out[283]:
       mylist1  mylist2  mylist3  mylist4
node1      3.2      3.0      3.6      2.0
node1      4.5      4.0      4.2      5.0
node1      6.8      6.0      6.6      8.0
node1      7.6      7.0      7.8      6.0
node1      8.8      8.0      8.9      8.0
node1      9.6      9.0      9.5      6.0
node2      6.2      6.0      6.8      2.0
node2      9.5      9.0      9.9      5.0
node2      2.8      2.0      2.5      8.0
node2      8.6      8.0      8.2      6.0
node2      1.8      1.0      1.6      8.0
node2      8.6      8.0      8.2      6.0

答案 2 :(得分:1)

另一种方法

df = pd.DataFrame(mylist1+mylist2+mylist3+mylist4).sort_values(0).reset_index(drop=True)
first_half = a.loc[:3,1:].T
second_half = a.loc[4:,1:].T
first_half['id'] = 'node1'
first_half['year'] = np.arange(2001,2007)
second_half['id'] = 'node2'
second_half['year'] = np.arange(2001,2007)

master = pd.concat([first_half,second_half]).reset_index(drop=True)
master = master[['id','year',0,1,2,3]]
master.columns = ['id','year','mylist1','mylist2','mylist3','mylist4']
##master

输出

       id  year  mylist1  mylist2  mylist3  mylist4
0   node1  2001      3.2      3.0      3.6      2.0
1   node1  2002      4.5      4.0      4.2      5.0
2   node1  2003      6.8      6.0      6.6      8.0
3   node1  2004      7.6      7.0      7.8      6.0
4   node1  2005      8.8      8.0      8.9      8.0
5   node1  2006      9.6      9.0      9.5      6.0
6   node2  2001      6.2      6.0      6.8      2.0
7   node2  2002      9.5      9.0      9.9      5.0
8   node2  2003      2.8      2.0      2.5      8.0
9   node2  2004      8.6      8.0      8.2      6.0
10  node2  2005      1.8      1.0      1.6      8.0
11  node2  2006      8.6      8.0      8.2      6.0
相关问题