【问题标题】:split a Pandas series without a multiindex拆分没有多索引的 Pandas 系列
【发布时间】:2013-06-30 05:54:12
【问题描述】:

我想采用具有单级索引的 Pandas 系列并将该索引拆分为具有多列的数据框。例如,对于输入:

s = pd.Series(range(10,17), index=['a','a','b','b','c','c','c'])

s
a    10
a    11
b    12
b    13
c    14
c    15
c    16
dtype: int64

我想要的输出是:

    a    b    c
0   10   12   14
1   11   13   15
2   NaN  NaN  16

我不能直接使用 unstack 命令,因为它需要一个多索引,而我只有一个单级索引。我尝试输入一个具有相同值的虚拟索引,但出现错误“ReshapeError:索引包含重复条目,无法重塑”。

我知道这有点不寻常,因为 1)pandas 不喜欢参差不齐的数组,所以需要填充,2)需要任意重置索引,3)我不能真正“初始化” “数据框,直到我知道最长的列将是多长时间。但这似乎仍然是我应该能够以某种方式做到的事情。我也考虑过通过 groupby 来做,但似乎没有任何像 grouped_df.values() 这样没有任何聚合函数的东西——可能是出于上述原因。

【问题讨论】:

    标签: python split pandas reshape series


    【解决方案1】:

    可以使用groupbyapplyreset_index创建多索引Series,然后调用unstack

    import pandas as pd
    s = pd.Series(range(10,17), index=['a','a','b','b','c','c','c'])
    df = s.groupby(level=0).apply(pd.Series.reset_index, drop=True).unstack(0)
    print df
    

    输出:

       a   b   c
    0  10  12  14
    1  11  13  15
    2 NaN NaN  16
    

    【讨论】:

      【解决方案2】:

      不确定这是多么普遍。我通过 concat 模式将此称为 groupby。 本质上是一个应用,但可以控制它的组合方式。

      In [24]: s = pd.Series(range(10,17), index=['a','a','b','b','c','c','c'])
      
      In [25]: df = DataFrame(dict(key = s.index, value = s.values))
      
      In [26]: df
      Out[26]: 
        key  value
      0   a     10
      1   a     11
      2   b     12
      3   b     13
      4   c     14
      5   c     15
      6   c     16
      
      In [27]: concat(dict([ (g,Series(grp['value'].values)) for g, grp in df.groupby('key') ]),axis=1)
      Out[27]: 
          a   b   c
      0  10  12  14
      1  11  13  15
      2 NaN NaN  16
      

      【讨论】:

      • 太好了,这正是我想要的。谢谢!
      猜你喜欢
      • 2023-03-10
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      • 2013-09-08
      • 1970-01-01
      • 2019-01-12
      • 1970-01-01
      相关资源
      最近更新 更多