pandas.wide_to_long

pandas.wide_to_long

pandas.wide_to_long(df, stubnames, i, j, sep='', suffix='\d+')

wide_to_long,宽到长 的意思。将数据集从宽格式转换为长格式。 柔韧性较低,但比 melt 更易于使用。

对于stubnames ['A','B'],此函数需要找到一组或多组列,格式为A-suffix1,A-suffix2,...,B-suffix1,B-suffix2,...您可以指定所需的内容 用j生成长格式调用此后缀(例如j ='year')

假设这些宽变量的每一行都由i唯一标识(可以是单个列名或列名列表)

数据框中的所有剩余变量保持不变。

参数说明

  • df:DataFrame
    宽格式的 DataFrame。

  • stubnames:str or list-like
    指定“存根名称”。要转换的 columns 需要符合“前缀”(存根名称)+“后缀”的形式,例如,columns 为 A1970、B2008,则前缀(存根名称)为 A 和 B,后缀为 1970 和 2008。

  • i:str or list-like
    要用作 id 变量的列

  • j:str
    给长格式的“后缀”列设置 columns。

  • sep:str, default “”
    设置要删除的分隔符。如果原 columns 中含有分隔符,可以在这里删除。例如 columns 为 A-1970,则指定 sep='-' 来删除分隔符。默认为空。

  • suffix:str, default '\d+'
    设置正则表达式取得“后缀”。默认'\d+'表示取得数字后缀。没有数字的“后缀”可以用'\D+'来取得。对于离散型“后缀”,例如 A-one、B-two,可以用 suffix='(!?one|two)' 来取得。

返回值

  • DataFrame
    一个 DataFrame,它包含每个存根名称作为变量,具有新索引(i,j)

例子

np.random.seed(123)
df = pd.DataFrame({"A1970" : {0 : "a", 1 : "b", 2 : "c"},
                   "A1980" : {0 : "d", 1 : "e", 2 : "f"},
                   "B1970" : {0 : 2.5, 1 : 1.2, 2 : .7},
                   "B1980" : {0 : 3.2, 1 : 1.3, 2 : .1},
                   "X"     : dict(zip(range(3), np.random.randn(3)))
                  })
df["id"] = df.index
df

输出:
  A1970 A1980  B1970  B1980         X  id
0     a     d    2.5    3.2 -1.085631   0
1     b     e    1.2    1.3  0.997345   1
2     c     f    0.7    0.1  0.282978   2
pd.wide_to_long(df=df, stubnames=['A', 'B'], i='id', j='year')

输出:
                X  A    B
id year                  
0  1970 -1.085631  a  2.5
1  1970  0.997345  b  1.2
2  1970  0.282978  c  0.7
0  1980 -1.085631  d  3.2
1  1980  0.997345  e  1.3
2  1980  0.282978  f  0.1

多个 id 列

df = pd.DataFrame({
    'famid': [1, 1, 1, 2, 2, 2, 3, 3, 3],
    'birth': [1, 2, 3, 1, 2, 3, 1, 2, 3],
    'ht1': [2.8, 2.9, 2.2, 2, 1.8, 1.9, 2.2, 2.3, 2.1],
    'ht2': [3.4, 3.8, 2.9, 3.2, 2.8, 2.4, 3.3, 3.4, 2.9]
})
pd.wide_to_long(df, stubnames='ht', i=['famid', 'birth'], j='age')

输出:
                  ht
famid birth age
1     1     1    2.8
            2    3.4
      2     1    2.9
            2    3.8
      3     1    2.2
            2    2.9
2     1     1    2.0
            2    3.2
      2     1    1.8
            2    2.8
      3     1    1.9
            2    2.4
3     1     1    2.2
            2    3.3
      2     1    2.3
            2    3.4
      3     1    2.1
            2    2.9

相关推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注

微信扫一扫

微信扫一扫

微信扫一扫,分享到朋友圈

pandas.wide_to_long
返回顶部

显示

忘记密码?

显示

显示

获取验证码

Close