通过聚合列表构建数据帧

时间:2014-10-10 13:16:42

标签: python list pandas dataframe

我有以下数据:

X = [8.5,9.48,8.65,8.16,8.83,7.76,8.63]
Y = [8.27,8.20,8.25,8.14,9.00,8.10,7.20,8.32,7.70]

并希望拥有数据框:

   serie  value
0      X   8.50
1      X   9.48
2      X   8.65
3      X   8.16
4      X   8.83
5      X   7.76
6      X   8.63
7      Y   8.27
8      Y   8.20
9      Y   8.25
10     Y   8.14
11     Y   9.00
12     Y   8.10
13     Y   7.20
14     Y   8.32
15     Y   7.70

暂时如下:

import pandas as pd

lst = ['X']*len(X)
lst.extend(['Y']*len(Y))
X.extend(Y)

df = pd.DataFrame({"value":X, "serie":lst})

但是我想知道是否有一种(更多的pythonic?)方式用熔化来做它?

3 个答案:

答案 0 :(得分:5)

您可以为列表X和Y构建DataFrame,然后将ignore_index连接到True

>>> xdf = pd.DataFrame({'value': X, 'serie': 'X'})
>>> ydf = pd.DataFrame({'value': Y, 'serie': 'Y'})
>>> pd.concat([xdf, ydf], ignore_index=True)
   serie  value
0      X   8.50
1      X   9.48
2      X   8.65
3      X   8.16
4      X   8.83
5      X   7.76
6      X   8.63
7      Y   8.27
8      Y   8.20
...

答案 1 :(得分:2)

这更加高效和简洁:

df = pd.DataFrame({'value': X+Y, 'serie': 'Y'})
df['serie'][0:len(X)] = 'X'

答案 2 :(得分:1)

您可以在构造函数中内联构建字典到DataFrame:

In [246]:

pd.DataFrame({'serie':['X']*len(X) + ['Y']*len(Y), 'value':X+Y})
Out[246]:
   serie  value
0   X     8.50 
1   X     9.48 
2   X     8.65 
3   X     8.16 
4   X     8.83 
5   X     7.76 
6   X     8.63 
7   Y     8.27 
8   Y     8.20 
9   Y     8.25 
10  Y     8.14 
11  Y     9.00 
12  Y     8.10 
13  Y     7.20 
14  Y     8.32 
15  Y     7.70