【问题标题】:Transpose some rows to columns pandas将一些行转置为 pandas 列
【发布时间】:2018-02-14 22:23:57
【问题描述】:

我正在使用 pandas (python) 并且有一个数据框,我想在其中保留一些列,并将一些列转换为行,以减少列数并且也不会丢失列中的数据。例如,以下是我的数据框:

ID  Name  Gender       R1      R2      R3      R4      R5     R6
-------------------------------------------------------------------
01  Abc     M          A1      A2      B3      B1      D2     A3
02  Cde     F          A2      B1      B2      D1      C2     C3

我想保持 id、name、gender 不变,并将 R 的列转换为行,例如:

ID  Name Gender  R  R_no
------------------------
01  Abc     M    A1  1
01  Abc     M    A2  2
01  Abc     M    B3  3
01  Abc     M    B1  4
01  Abc     M    D2  5
01  Abc     M    A3  6
02  Cde     F    A2  1
02  Cde     F    B1  2
02  Cde     F    B2  3
02  Cde     F    D1  4
02  Cde     F    C2  5
02  Cde     F    C3  6

谁能帮我解决这个问题?提前致谢!

【问题讨论】:

    标签: python python-2.7 pandas


    【解决方案1】:

    使用stack:

    df = df.set_index(['ID','Name','Gender'])
    df.columns = df.columns.str.extract('(\d+)', expand=False)
    df = df.stack().reset_index(name='R').rename(columns={'level_3':'R_no'})
    print (df)
        ID Name Gender R_no   R
    0    1  Abc      M    1  A1
    1    1  Abc      M    2  A2
    2    1  Abc      M    3  B3
    3    1  Abc      M    4  B1
    4    1  Abc      M    5  D2
    5    1  Abc      M    6  A3
    6    2  Cde      F    1  A2
    7    2  Cde      F    2  B1
    8    2  Cde      F    3  B2
    9    2  Cde      F    4  D1
    10   2  Cde      F    5  C2
    11   2  Cde      F    6  C3
    

    【讨论】:

      【解决方案2】:

      使用pd.wide_to_long

      In [206]: pd.wide_to_long(df,stubnames='R',i=['ID','Name','Gender'],j='R_no').reset_index()
      Out[206]:
          ID Name Gender  R_no   R
      0    1  Abc      M     1  A1
      1    1  Abc      M     2  A2
      2    1  Abc      M     3  B3
      3    1  Abc      M     4  B1
      4    1  Abc      M     5  D2
      5    1  Abc      M     6  A3
      6    2  Cde      F     1  A2
      7    2  Cde      F     2  B1
      8    2  Cde      F     3  B2
      9    2  Cde      F     4  D1
      10   2  Cde      F     5  C2
      11   2  Cde      F     6  C3
      

      【讨论】:

      • 我尝试了您的解决方案,但我得到了一个空数据框作为回报。
      • 我也是。我也得到一个空的数据框
      猜你喜欢
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-20
      • 2021-07-23
      相关资源
      最近更新 更多