【问题标题】:Convert dataframe from wide to long - pandas将数据帧从宽转换为长 - 熊猫
【发布时间】:2018-04-29 13:32:11
【问题描述】:

我有一个这样的数据框:

index    S_1 S_2 S_3 S_4
 0        1    0   0   1
 1        1    1  Nan Nan

我正在尝试将其从长更改为宽。例如。

index num S
 0     1  1
 0     2  0
 0     3  0
 0     4  1
 1     1  1
 1     2  1
 1     3  Nan
 1     4  Nan

我根据this 的回答尝试了以下代码,但出现以下错误:

matches_df.columns = matches_df.columns.str.split('_', expand=True)

TypeError: 'float' 类型的对象没有 len()

为什么我无法在“_”上拆分?我想保留列中的其他信息。

【问题讨论】:

    标签: pandas split reshape


    【解决方案1】:

    pandas.wide_to_long,当列有这样的存根时,这很好。

    import pandas as pd
    
    df.reset_index(inplace=True,drop=True)
    df['id'] = df.index
    df = pd.wide_to_long(df, stubnames='S_', i='id', j='num').reset_index().rename(columns={'S_':'S'})
    
    #  id num  index    S
    #0   0   1      0  1.0
    #1   1   1      1  1.0
    #2   0   2      0  0.0
    #3   1   2      1  1.0
    #4   0   3      0  0.0
    #5   1   3      1  NaN
    #6   0   4      0  1.0
    #7   1   4      1  NaN
    

    【讨论】:

    • 这正是我所需要的。我收到以下错误:未实现非唯一索引上的 Index._join_level。这是什么意思?
    • 已修复。我只需要重置索引。
    • @oli5679 太棒了!是的,看起来索引最初并不是唯一的。
    猜你喜欢
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 2021-12-21
    • 2014-01-04
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    相关资源
    最近更新 更多