使用pandas将多行作为列标题

时间:2017-10-03 15:25:06

标签: python python-2.7 pandas

我有一个看起来像这样的df

group   sample  total   +A  +G  +GG -A  -G  -GG A   C   G   N   T
group1  A   698 0   22  1   1   0   0   696 0   0   0   0
group1  B   707 1   0   0   0   11  1   1   1   693 0   0
group2  A   814 0   225 7   0   0   0   804 2   7   0   1
group2  B   826 0   0   0   0   11  0   0   0   815 0   0

我想将其转换/转换为带有下面标题的df

预期输出

_df = df.groupby(['group', 'base']).size().unstack(fill_value=0).reset_index().rename_axis(None, axis=1)

到目前为止,采用此处显示的代码pandas row values to column headers

使用代码:

 _df
    group   +A  +G  +GG -A  -G  -GG A   C   G   N   T
0   group1  1   1   1   1   1   1   2   2   2   2   2
1   group2  0   1   1   0   1   0   2   2   2   2   2

输出

T(n) =   2 * T(n-1) + 1 * O(1)
     =   4 * T(n-2) + 3 * O(1)
     =   8 * T(n-3) + 7 * O(1)
     = 2^k * T(n-k) + ((2^k)-1) * O(1)

我不确定pandas有什么内置命令可以从原始数据框中获取数字,而不是0,1我也错过了总列。

2 个答案:

答案 0 :(得分:3)

像这样使用数据透视表

 render() {
    const {
      activeClass,
      containerClass,
      exactLink,
      hoverClass,
      icon,
      label,
      link,
      onClick,
      handleActive,
    } = this.props

    let message = (
      <div className='Button--message'>
        <div className='Button--messageText'>{label}</div>
      </div>
    )   
    if (icon) {
      message = (
        <div className='Button--message'>
          <div className='Button--messageIcon'><Icon name={icon} / ></div>
          <div className='Button--messageText'>{label}</div>
        </div>
      )    
    }

    const buttonContainerClass = this.isHovering() ? `${containerClass} ${hoverClass}` : containerClass

    const ButtonContainer = props => (
      <button
        {...props}
        className={this.props.buttonClass || ''}
        onMouseEnter={() => this.handleMouseIn()}
        onMouseLeave={() => this.handleMouseOut()}
      >
        {message}
      </button> 
    )

    let Result
    if (typeof(link) === 'string') {
      if (typeof(activeClass) === 'string' && activeClass.length > 0) {
        const opts = {
          activeClassName: activeClass || '',
          className: buttonContainerClass || '',
          exact: exactLink || false,
          isActive: handleActive || undefined,
          strict: true,
          to: link,
        }

        Result = (
          <NavLink {...opts} >
            <ButtonContainer />
          </NavLink>
        )
      } else {
        Result = (
          <Link to={link} className={buttonContainerClass}>
            <ButtonContainer />
          </Link>
        )
      }

    } else if (typeof(onClick) === 'function') {
      Result = (
        <div className={buttonContainerClass}>
          <ButtonContainer onClick={() => onClick()} />
        </div>
      )

    } else {
      console.warn('Button must have an action props> ', {props: this.props})
    }

    return Result
  }

输出:

base                  +A     +G  +GG   -A    -G  -GG      A    C      G    N  \
group  sample total                                                            
group1 A      698    0.0   22.0  1.0  1.0   0.0  0.0  696.0  0.0    1.0  0.0   
              707    0.0    0.0  0.0  0.0   0.0  0.0    1.0  0.0    0.0  0.0   
       B      707    1.0    0.0  0.0  0.0  11.0  1.0    0.0  1.0  693.0  0.0   
group2 A      814    0.0  225.0  7.0  0.0   0.0  0.0  804.0  2.0    7.0  0.0   
       B      826    0.0    0.0  0.0  0.0  11.0  0.0    0.0  0.0  815.0  0.0   

base                   T  
group  sample total       
group1 A      698    0.0  
              707    0.0  
       B      707    0.0  
group2 A      814    1.0  
       B      826    0.0  

答案 1 :(得分:1)

pd.pivot_table(_df, columns=['base'], values=['size'],index='index_name').fillna(0)