我有以下数据:
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?)方式用熔化来做它?
答案 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