【问题标题】:reshape data frame via multiindex将数据框重塑为多索引
【发布时间】:2017-08-20 12:10:51
【问题描述】:

我创建了这个示例数据

pd.DataFrame.from_items([(0,['a1', 'a1', 'a2', 'a2']), (1,['b1', 'b1', 'b2', 'b2']), (2,['m', 'n', 'o', 'p'])])
    0   1  2
0  a1  b1  m
1  a1  b1  n
2  a2  b2  o
3  a2  b2  p

我想将此数据框“减少”为具有“0”列中唯一值的索引,然后作为列返回“2”列中值的数组。 例如

       '2'
Index 
a1    [m,n]
a2    [o,p]

因此,我需要将其作为数据框,因为我想将生成的数据框连接到另一个数据框。它们都“相当”大(18mio 行)。 我尝试使用堆栈,但我不知道该怎么做。我尝试使用数据透视表,但是 col '2' 中的值在标题中,而不是用作值。任何帮助将不胜感激!

【问题讨论】:

    标签: python list python-3.x pandas group-by


    【解决方案1】:

    你可以使用groupbyapply,最后转换成Seriesto_frame

    print (df.groupby(0)[2].apply(list))
    0
    a1    [m, n]
    a2    [o, p]
    Name: 2, dtype: object
    
    print (df.groupby(0)[2].apply(list).to_frame())
             2
    0         
    a1  [m, n]
    a2  [o, p]
    

    另一种解决方案:

    print (df.groupby(0)[2].apply(lambda x: x.tolist()).to_frame())
             2
    0         
    a1  [m, n]
    a2  [o, p]
    

    如果需要输出为unique 值:

    df = pd.DataFrame.from_items([(0,['a1', 'a1', 'a1', 'a2']), 
                                  (1,['b1', 'b1', 'b2', 'b2']),
                                  (2,['m', 'n', 'm', 'p'])])
    print (df)
        0   1  2
    0  a1  b1  m
    1  a1  b1  n
    2  a1  b2  m
    3  a2  b2  p
    
    print (df.groupby(0)[2].apply(list).to_frame())
                2
    0            
    a1  [m, n, m]
    a2        [p]
    
    print (df.groupby(0)[2].unique().to_frame())
             2
    0         
    a1  [m, n]
    a2     [p]
    

    【讨论】:

    • 谢谢,我在哪里可以找到有关如何处理数据帧和分组依据的全面概述?很感谢任何形式的帮助! :)
    • 很高兴能为您提供帮助。我认为docs 是完美的。
    猜你喜欢
    • 2019-12-07
    • 2019-06-30
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 2021-02-24
    • 2019-02-16
    • 1970-01-01
    相关资源
    最近更新 更多