【问题标题】:Transpose a dataframe for repeated columns in python为python中的重复列转置数据框
【发布时间】:2019-12-03 09:18:50
【问题描述】:

我有一个数据框,它由两列组成,即 'info and value' 。我需要根据 info 作为列名和值作为该列名中的值来转置这些 datframe。

但我面临的问题是在信息列中,有些值重复,有些不重复。因此,如果列名重复,则数据必须附加到该列中,如果没有,则应添加另一列

df

info    value
AA      3M 
BB      Charterer
DD      Tartous
AA      Syria
BB      +963
CC      +96
DD      pal

预期的输出如下:

AA     BB           CC     DD
3M     Charterer          Tartous
Syria   +963        +96    pal

在数据框 df 中,它与列 AA 分层,因此直到下一个 AA 发生之前,所有列都转换为 row 。在这些 CC 列中,AA 不存在,因此它必须为空,但对于下一个 AA,CC 列存在,因此应附加该值。

【问题讨论】:

    标签: python python-3.x pandas csv transpose


    【解决方案1】:

    如果每个组都以AA 值开头,则使用Series.cumsum 作为计数器,通过DataFrame.set_index 创建MultiIndex,通过Series.unstack 重塑,最后通过DataFrame.rename_axis 删除列名:

    df1 = (df.set_index([df['info'].eq('AA').cumsum(), 'info'])['value']
             .unstack()
             .rename_axis(None, axis=1))
    print (df1)
             AA         BB   CC       DD
    info                                
    1        3M  Charterer  NaN  Tartous
    2     Syria       +963  +96      pal
    

    【讨论】:

    • 我已经尝试过这些,但 CC 列在第一行有 nan 值,但它会洗牌并取第二行的值@jezrael
    • @D2DInfo 我看不出你如何能够稳健地实现这一目标......如果有另一组 AA、BB 和 DD,但仍然只有一个 CC - 是什么决定了 3 行中的哪一行CC现在进入了吗?
    • @D2DInfo - 如果可以为示例数据中的AA 等分隔符创建一些值,然后使用我的解决方案。但就像提到的乔恩克莱门茨一般解决方案是问题,如果第一列中的任何数据
    猜你喜欢
    • 2013-01-27
    • 2019-09-09
    • 2018-07-13
    • 2019-05-25
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多