【问题标题】:Ensure adjacent column values using pandas pivot_table使用 pandas pivot_table 确保相邻列的值
【发布时间】:2018-05-08 16:24:19
【问题描述】:

我有一个数据框:

index    col1    col2     col3
    0       X       A      123
    1       X       A      456
    2       X       B      654
    3       X       B      321
    4       X       A      111

我正在尝试使用 pivot_table 将此 df 转换为以下格式:

index       A       B
    0     123     654  
    1     456     321 
    2     111     NaN

我正在尝试使用...pivot_table(index=df.index, columns=['col2'], values='col3'),但这最终会处于以下状态:

index       A       B
    0     123     NaN  
    1     456     NaN 
    2     111     NaN
    3     NaN     654 
    4     NaN     321

我怎样才能避免这种情况?

【问题讨论】:

    标签: python pandas pivot-table


    【解决方案1】:

    您对pivot_table 的实现是正确的。

    要合并您所询问的记录(在透视数据框中),您需要首先使用pivot_table,然后使用apply 简单地从透视数据框中删除NaN,如this answer shows

    # Perform spreadsheet-style pivot table
    df2 = df.pivot_table(index=df.index, columns=['col2'], values='col3')
    print df2
    
    # Drop NaNs to shift rows up and combine records
    df1 = df2.apply(lambda x: pd.Series(x.dropna().values))
    print (df1)
    

    输出是:

    # df2
    col2      A      B
    0     123.0    NaN
    1     456.0    NaN
    2       NaN  654.0
    3       NaN  321.0
    4     111.0    NaN
    
    # df1
    col2      A      B
    0     123.0  654.0
    1     456.0  321.0
    2     111.0    NaN
    

    【讨论】:

      【解决方案2】:

      仍在使用pivot_table

      pd.pivot_table(df,index=df.groupby('col2').cumcount(),columns='col2',values='col3')
      Out[163]: 
      col2      A      B
      0     123.0  654.0
      1     456.0  321.0
      2     111.0    NaN
      

      【讨论】:

        猜你喜欢
        • 2019-06-30
        • 1970-01-01
        • 1970-01-01
        • 2016-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多