【问题标题】:Pandas wide_to_long, the id variables need to uniquely identify each rowpandaswide_to_long,id变量需要唯一标识每一行
【发布时间】:2018-06-14 19:16:54
【问题描述】:

假设我有一个这样的数据框

ID,Time1,Value1,Time2,Value2,Time3,Value3
1,2,1.1,3,1.2,4,1.3
1,5,2.1,6,2.2,7,2.3

预期的数据框是这样的

ID,Time,Value
1,2,1.1
1,3,1.2
1,4,1.3
1,5,2.1
1,6,2.2
1,7,2.3

如果行有唯一的 id,pd.wide_to_long 在这种情况下可以完美运行。

df = pd.wide_to_long(df, ['Time',Value],'ID','value', sep='', suffix='.+')\
    .reset_index()\
    .sort_values(['ID', 'Time'])\
    .drop('value', axis=1)\
    .dropna(how='any')

但是在这种情况下如何解决,如果行的 ID 不是唯一的

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    诀窍是使用reset_index 作为唯一值列:

    df = (pd.wide_to_long(df.reset_index(), ['Time','Value'],i='index',j='value')
            .reset_index(drop=True)
            .sort_values(['ID', 'Time'])
            .dropna(how='any')
            )
    print (df)
       ID  Time  Value
    0   1     2    1.1
    2   1     3    1.2
    4   1     4    1.3
    1   1     5    2.1
    3   1     6    2.2
    5   1     7    2.3
    

    详情

    print (pd.wide_to_long(df.reset_index(), ['Time','Value'],i='index',j='value'))
                 ID  Time  Value
    index value                 
    0     1       1     2    1.1
    1     1       1     5    2.1
    0     2       1     3    1.2
    1     2       1     6    2.2
    0     3       1     4    1.3
    1     3       1     7    2.3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      • 1970-01-01
      • 2015-12-24
      相关资源
      最近更新 更多