Python: 从一个数据框中选择多个列到另一个数据框,且不使用循环

1 投票
2 回答
1110 浏览
提问于 2025-04-17 23:56

我有一个数据表(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]

要把df2df1连接起来,我们需要设置一个连接的列,并且把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

撰写回答