首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Pandas将二维表(DataFrame)反转为一维列表?

如何使用Pandas将二维表(DataFrame)反转为一维列表?
EN

Stack Overflow用户
提问于 2015-01-04 10:01:12
回答 3查看 21.1K关注 0票数 21

我在Python/Pandas中寻找将二维表反转为一维列表的技巧。

我通常利用Excel函数来完成它,但我相信有一种聪明的Python方法可以做到这一点。

Step

Excel方法的更多细节:http://www.extendoffice.com/documents/excel/2461-excel-reverse-pivot-table.html

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-04 12:42:04

这种类型的操作也可以使用pd.melt来完成,它解除了DataFrame的枢轴。

如果DataFrame df如下所示:

代码语言:javascript
复制
  row labels  Tue  Wed  Thu  Sat  Sun  Fri  Mon
0      Apple   21   39   24   27   37   46   42
1     Banana   32   50   48   35   21   27   22
2       Pear   37   20   45   45   31   50   32

然后我们选择row_labels列作为我们的id_var,其余的列作为我们的值(value_vars)。我们甚至可以同时为这些列选择新名称:

代码语言:javascript
复制
>>> pd.melt(df, 
            id_vars='row labels', 
            value_vars=list(df.columns[1:]), # list of days of the week
            var_name='Column', 
            value_name='Sum of Value')

   row labels   Column   Sum of Value
0       Apple      Tue             21
1      Banana      Tue             32
2        Pear      Tue             37
3       Apple      Wed             39
4      Banana      Wed             50
5        Pear      Wed             20
...

value_vars相互叠加在一起:如果列值需要以特定的顺序排列,则需要在熔化后对这些列进行排序。

票数 51
EN

Stack Overflow用户

发布于 2015-01-04 10:18:19

这应该能起作用:

代码语言:javascript
复制
table = [
            ["Lables", "A", "B", "C"],
            ["X", 1, 2, 3],
            ["Y", 4, 5, 6],
            ["Z", 7, 8, 9]
        ]

new_table = [["Row", "Column", "Data"]]
for line in table[1:]:
    for name, cell in zip(table[0], line)[1:]:
        new_line = [line[0], name, cell]
        new_table.append(new_line)

产出如下:

代码语言:javascript
复制
[
    ['Row', 'Column', 'Data'],
    ['X', 'A', 1],
    ['X', 'B', 2],
    ['X', 'C', 3],
    ['Y', 'A', 4],
    ['Y', 'B', 5],
    ['Y', 'C', 6],
    ['Z', 'A', 7],
    ['Z', 'B', 8],
    ['Z', 'C', 9]
]
票数 2
EN

Stack Overflow用户

发布于 2015-01-04 10:54:42

取自http://pandas.pydata.org/pandas-docs/stable/reshaping.html的例子

tl;dr,使用:

代码语言:javascript
复制
from pandas import *
df.stack()

====================

让我们举一个例子来说明如何做到这一点。

首先生成示例数据:

代码语言:javascript
复制
from pandas import *
import pandas.util.testing as tm; tm.N = 3
import numpy as np
def unpivot(frame):
    N, K = frame.shape
    data = {'value' : frame.values.ravel('F'),
            'variable' : np.asarray(frame.columns).repeat(N),
            'date' : np.tile(np.asarray(frame.index), K)}
    return DataFrame(data, columns=['date', 'variable', 'value'])
df = unpivot(tm.makeTimeDataFrame())
df2=  df.pivot('date', 'variable')

我们将取消这张桌子的枢轴:

代码语言:javascript
复制
               value                              
variable           A         B         C         D
date                                              
2000-01-03 -0.425081  0.163899 -0.216486 -0.266285
2000-01-04  0.078073  0.581277  0.103257 -0.338083
2000-01-05  0.721696 -1.311509 -0.379956  0.642527

运行:

代码语言:javascript
复制
df2=  df.pivot('date', 'variable')
print df2

瞧!现在我们得到了想要的桌子。

代码语言:javascript
复制
                        value
date       variable          
2000-01-03 A        -0.425081
           B         0.163899
           C        -0.216486
           D        -0.266285
2000-01-04 A         0.078073
           B         0.581277
           C         0.103257
           D        -0.338083
2000-01-05 A         0.721696
           B        -1.311509
           C        -0.379956
           D         0.642527
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27764378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档