将 pandas 系列的 numpy 矩阵转换为 Multiindex 系列

Posted

技术标签:

【中文标题】将 pandas 系列的 numpy 矩阵转换为 Multiindex 系列【英文标题】:convert pandas Series of numpy matricies to Multiindex Series 【发布时间】:2018-07-25 10:48:10 【问题描述】:

我有一个 pandas 系列的 numpy 矩阵。

data = [[['a','b','c'],[6,3,4]],[['d','e','f'],[2,9,4]],[['g','h','i'],[9,6,4]]]
s = pd.Series(data = data)
s
Out[39]: 
0    [[a, b, c], [6, 3, 4]]
1    [[d, e, f], [2, 9, 4]]
2    [[g, h, i], [9, 6, 4]]

我想将其转换为多索引系列。

sf
Out[47]: 
0  a    6
   b    3
   c    4
1  d    2
   e    9
   f    4
2  g    9
   h    6
   i    4
dtype: int64

sf.index
Out[48]: 
MultiIndex(levels=[[0, 1, 2], ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']],
           labels=[[0, 0, 0, 1, 1, 1, 2, 2, 2], [0, 1, 2, 3, 4, 5, 6, 7, 8]])

我该怎么做?

【问题讨论】:

【参考方案1】:

是未嵌套列表+set_index

v=s.apply(pd.Series)
m=list(map(len,v[0]))

pd.DataFrame('v1':v[0].sum(),'v2':v[1].sum(),index=v.index.repeat(m)).set_index('v1',append=True).v2
Out[142]: 
  v1    
0 a    6
  b    3
  c    4
1 d    2
  e    9
  f    4
2 g    9
  h    6
  i    4

【讨论】:

哇,我很难理解第 3 行(但谢谢!) @Selah sum with list of list 将创建一个扁平列表,此处重复是创建索引,例如 1 重复 3 将等于 [1,1,1]

以上是关于将 pandas 系列的 numpy 矩阵转换为 Multiindex 系列的主要内容,如果未能解决你的问题,请参考以下文章

直接将 Pandas 数据帧转换为稀疏 Numpy 矩阵

将 pandas 稀疏数据帧转换为稀疏 numpy 矩阵以供 sklearn 使用?

numpy 矩阵到熊猫系列

将 Pandas 系列的二维 numpy 数组转换为一维 numpy 数组列的 Pandas DataFrame

将数据框转换为 Numpy 数组 [重复]

如何将稀疏的 pandas 数据帧转换为 2d numpy 数组