Python:从另一个数据帧中选择数据框中的多个列而不进行循环

时间:2014-03-26 07:03:40

标签: python pandas

我有一个有3000列的数据帧(df1)。每列对应一个股票代码。我使用pd.read_csv在一个DataFrame(df2)中导出一个500个股票代码的csv文件(1列和500行,不包括索引)。如何从df1中提取与df2中的股票代码匹配的500列的新数据名称?

我可以编写一个迭代遍历df2中每一行的循环,并从df1一次提取一列,但我觉得这很慢,可能不是最有效的方法。

2 个答案:

答案 0 :(得分:3)

您可以直接使用loc从DataFrame中选择一些列(使用@ 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

答案 1 :(得分:2)

您可以使用join

为了简化您的问题,我们在df1中有三个股票,s1,s2和s3。我们在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