【问题标题】:Pandas stack columns with the same index - sideways具有相同索引的 Pandas 堆栈列 - 横向
【发布时间】:2022-12-17 14:03:26
【问题描述】:

我想操作包含在 Dataframe 中的数据。数据框的结构如下

EID     FX      FY      FZ      SUB
1001    FXA     FYA     FZA     101
1002    FXB     FYB     FZB     101
1003    FXC     FYC     FZC     101
1004    FXD     FYD     FZD     101
1001    FXE     FYE     FZE     102
1002    FXF     FYF     FZF     102
1003    FXG     FYG     FZG     102
1004    FXH     FYH     FZH     102
1001    FXI     FYI     FZI     103
1002    FXJ     FYJ     FZJ     103
1003    FXK     FYK     FZK     103
1004    FXL     FYL     FZL     103

按“SUB”列对数据进行排序并与“EID”列对齐,如下所示,

EID     FX      FY      FZ      SUB     FX      FY      FZ      SUB     FX      FY      FZ      SUB
1001    FXA     FYA     FZA     101     FXE     FYE     FZE     102     FXI     FYI     FZI     103
1002    FXB     FYB     FZB     101     FXF     FYF     FZF     102     FXJ     FYJ     FZJ     103
1003    FXC     FYC     FZC     101     FXG     FYG     FZG     102     FXK     FYK     FZK     103
1004    FXD     FYD     FZD     101     FXH     FYH     FZH     102     FXL     FYL     FZL     103

我已经完成了这个示例并且它适用于单个列, Move values in rows in a new column in pandas

但我想移动的不仅仅是一个列。

提前感谢您提供的任何帮助。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    逻辑是:

    • 按“SUB”分组。
    • 迭代石斑鱼并收集所有子组。
    • 按索引连接所有收集的子组。
    df_arr = []
    for key, sub_df in df.groupby("SUB"):
      df_arr.append(sub_df.set_index("EID"))
    
    df = pd.concat(df_arr, axis="columns")
    

    输出:

           FX   FY   FZ  SUB   FX   FY   FZ  SUB   FX   FY   FZ  SUB
    EID                                                             
    1001  FXA  FYA  FZA  101  FXE  FYE  FZE  102  FXI  FYI  FZI  103
    1002  FXB  FYB  FZB  101  FXF  FYF  FZF  102  FXJ  FYJ  FZJ  103
    1003  FXC  FYC  FZC  101  FXG  FYG  FZG  102  FXK  FYK  FZK  103
    1004  FXD  FYD  FZD  101  FXH  FYH  FZH  102  FXL  FYL  FZL  103
    

    【讨论】:

      【解决方案2】:

      尝试这个:

      cols = df.columns[1:]
      df = (df.set_index(['EID',df.groupby('EID').cumcount()])[cols]
              .unstack()
              .reset_index())
      

      【讨论】:

        猜你喜欢
        • 2021-02-22
        • 2020-08-20
        • 2017-08-09
        • 2018-09-16
        • 2013-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-26
        相关资源
        最近更新 更多