【问题标题】:How to get dummies and groupby如何获得假人和 groupby
【发布时间】:2017-07-30 13:24:57
【问题描述】:

我有下面的数据框

   Q  A
A  a  h  
A  b  i
A  c  j
B  d  k
B  a  l 
B  b  m
C  c  n

我想得到 dummy 和 groupby

    a   b   c   d    e   f   g
A   h   i   j  nan  nan nan nan
B   l  nan nan nan  k   nan nan      
C  nan nan  n  nan  nan nan nan

col=df.Q

我必须申请get_dummiesandgroupby。但我想不通。

我怎样才能得到这个结果?

【问题讨论】:

    标签: python pandas dataframe group-by pivot-table


    【解决方案1】:

    看来你需要reset_indexpivot

    df = df.reset_index().pivot(index='index', columns='Q', values='A')
    print (df)
    Q         a     b     c     d
    index                        
    A         h     i     j  None
    B         l     m  None     k
    C      None  None     n  None
    

    然后如果需要reindex_axisreplace:

    cols = list('abcdefg')
    print (df.reindex_axis(cols, axis=1).replace({None:np.nan}))
    Q        a    b    c    d   e   f   g
    index                                
    A        h    i    j  NaN NaN NaN NaN
    B        l    m  NaN    k NaN NaN NaN
    C      NaN  NaN    n  NaN NaN NaN NaN
    

    编辑:

    如果数据中的重复更好是groupbyjoin

    print (df)
       Q  A
    A  a  h
    A  b  i
    A  c  j
    B  d  k
    B  a  l
    B  b  m <-duplicates B b
    B  b  t <-duplicates B b
    C  c  n
    
    
    df = df.reset_index().groupby(['index','Q'])['A'].apply(','.join).unstack()
    print (df)
    Q         a     b     c     d
    index                        
    A         h     i     j  None
    B         l   m,t  None     k
    C      None  None     n  None
    

    pivot_table 的另一种可能解决方案:

    #aggfunc='first' - get only first value, another values are lost
    df1 = df.reset_index().pivot_table(index='index', columns='Q', values='A', aggfunc='first')
    print (df1)
    Q         a     b     c     d
    index                        
    A         h     i     j  None
    B         l     m  None     k
    C      None  None     n  None
    Q         a     b     c     d
    
    #aggfunc='sum' - summed data, no separator
    df2 = df.reset_index().pivot_table(index='index', columns='Q', values='A', aggfunc='sum')
    print (df2)
    index                        
    A         h     i     j  None
    B         l    mt  None     k
    C      None  None     n  None
    Q         a     b     c     d
    
    #aggfunc=','.join - summed data with separator
    df3 = df.reset_index().pivot_table(index='index', columns='Q', values='A', aggfunc=','.join)
    print (df3)
    index                        
    A         h     i     j  None
    B         l   m,t  None     k
    C      None  None     n  None
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-07
      • 2019-08-31
      • 2021-10-28
      • 2014-09-08
      • 2015-09-28
      • 2020-05-19
      • 1970-01-01
      相关资源
      最近更新 更多