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

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

我还阅读了SO和Web上有关该主题的许多文章,并尝试了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        ?


但是这种确定是笨拙的,必须有更好的方法!

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

最佳答案

使用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        ?

关于python - Pandas df转换:比df.unstack()。unstack()更好的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46413441/

10-09 02:48