熊猫数据框到系列

时间:2020-06-04 20:09:24

标签: python pandas numpy

我有这个数据框:

pd.DataFrame({"X": [1,2,3,4],
                   "Y": [5,6,7,8],
                   "Z": [9,10,11,12]})

enter image description here

我正在寻找此输出:

enter image description here

目前,我发现解决的类似问题是相反的:从系列到数据框。我发现最相似的是this one,这一点都不相似。我也尝试过使用pivot_table()reshape(),但是它们需要一个索引列,而我只是在寻找一个列。

有什么建议吗?

PS:您可以假定数据帧有100列以避免避免一一选择,但是您可以按顺序调用它们(例如,如果它们是100列,则可以执行X1:X100

4 个答案:

答案 0 :(得分:7)

ravel('F')使用展平-

In [14]: pd.Series(df.to_numpy(copy=False).ravel('F'))
Out[14]: 
0      1
1      2
2      3
3      4
4      5
5      6
6      7
7      8
8      9
9     10
10    11
11    12
dtype: int64

该系列是对输入数据框的视图,这实际上意味着免费的运行时和零内存开销。让我们验证一下-

In [20]: s = pd.Series(df.to_numpy(copy=False).ravel('F'))

In [21]: np.shares_memory(s,df)
Out[21]: True

让我们也确认时间-

In [2]: df = pd.DataFrame(np.random.rand(100000,3), columns=['X','Y','Z'])

In [3]: %timeit pd.Series(df.to_numpy(copy=False).ravel('F'))
579 µs ± 9.09 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

答案 1 :(得分:5)

这是melt

df.melt()[['value']]

输出:

    value
0       1
1       2
2       3
3       4
4       5
5       6
6       7
7       8
8       9
9      10
10     11
11     12

答案 2 :(得分:4)

一种方法是通过堆叠将数据从“宽”格式整形为“高”格式:

df.T.stack().reset_index(drop=True)
#0      1
#1      2
#2      3
#3      4
#4      5
#5      6
#6      7
#7      8
#8      9
#9     10
#10    11
#11    12

答案 3 :(得分:0)

一如既往,在熊猫中有很多“皮猫”的方法,然后性能可能成为标准。这是一个元答案,用于比较效果:

  1. ravel,来自Divakar:80美元
  2. DYZ的
  3. stack:640美元
  4. Quanli Hoang的
  5. melt:2.03毫秒