Python: 从一个数据框中选择多个列到另一个数据框,且不使用循环
我有一个数据表(df1),里面有3000列。每一列对应一个股票代码。我用 pd.read_csv
从一个包含500个股票代码的CSV文件中导出一个新的数据表(df2),这个文件有1列和500行(不算索引)。我想从df1中提取出500列,这些列的股票代码和df2里的股票代码匹配,放到一个新的数据表里。
我可以写一个循环,逐行遍历df2,然后从df1中提取一列,但我觉得这样太慢了,可能不是最有效的方法。
2 个回答
2
你可以使用连接。
为了简化你的问题,假设我们有三个股票,分别是s1、s2和s3,存放在df1
里。而在df2
中,我们只有s1和s3。
In [35]: df1
Out[35]:
s1 s2 s3
0 1 2 3
1 4 5 6
2 7 8 9
3 10 11 12
[4 rows x 3 columns]
In [36]: df2
Out[36]:
stock
0 s1
1 s3
[2 rows x 1 columns]
要把df2
和df1
连接起来,我们需要设置一个连接的列,并且把df1
转置,这样股票名称就会变成索引:
In [37]: df2.join(df1.T, on='stock')
Out[37]:
stock 0 1 2 3
0 s1 1 4 7 10
1 s3 3 6 9 12
[2 rows x 5 columns]
如果你对SQL有点了解,可以把它想象成
SELECT * FROM df2 JOIN df1.T ON df2.stock = df1.T.index
4
你可以直接使用 loc 来从你的数据表中选择一些列(就像 @waitingkuo 的例子那样):
In [11]: df1.loc[:, df2.stock] # equivalent to df1[df2.stock]
Out[11]:
s1 s3
0 1 3
1 4 6
2 7 9
3 10 12