pandas df transformation:比df.unstack()更好的方法.unstack()

时间:2017-09-25 20:11:56

标签: python pandas dataframe transformation

尝试将pandas DataFrames从宽格式转换为长格式。

我已尝试melt(),使用wide_to_long()(简单melt()),但仍然与我收到的语法和输出混淆。

我还阅读了有关此主题的SO和网络上的许多帖子,并尝试了quite some proposed方法,但结果从来都不是我想要的

This post帮助我发现unstack() - 我终于设法得到了我想要的结果连续两次df.unstack().unstack()

我确定这不是最好的方法,并希望提示!这是我的榜样:

import pandas as pd

# an example df (the real data makes more sense):
series_list = [
    pd.Series(list("hello! hello!"), name='greeting'),
    pd.Series(list("stackoverflow"), name='name'),
    pd.Series(list("howsit going?"), name='question')
]

wide_df = pd.DataFrame(series_list)

创建像这样的df总是给我一个格式:

          0  1  2  3  4  5  6  7  8  9  10 11 12
greeting  h  e  l  l  o  !     h  e  l  l  o  !
name      s  t  a  c  k  o  v  e  r  f  l  o  w
question  h  o  w  s  i  t     g  o  i  n  g  ?

但是,我希望pd.Series() name=属性成为列名称

对我有用的是提到的df.unstack().unstack()

   greeting name question
0         h    s        h
1         e    t        o
2         l    a        w
3         l    c        s
4         o    k        i
5         !    o        t
6              v         
7         h    e        g
8         e    r        o
9         l    f        i
10        l    l        n
11        o    o        g
12        !    w        ?

但这肯定是笨重的,必须有更好的方法!

谢谢,祝你有个美好的一天:)

1 个答案:

答案 0 :(得分:2)

使用T

wide_df.T
Out[1108]: 
   greeting name question
0         h    s        h
1         e    t        o
2         l    a        w
3         l    c        s
4         o    k        i
5         !    o        t
6              v         
7         h    e        g
8         e    r        o
9         l    f        i
10        l    l        n
11        o    o        g
12        !    w        ?