我有一个有3000列的数据帧(df1)。每列对应一个股票代码。我使用pd.read_csv
在一个DataFrame(df2)中导出一个500个股票代码的csv文件(1列和500行,不包括索引)。如何从df1中提取与df2中的股票代码匹配的500列的新数据名称?
我可以编写一个迭代遍历df2中每一行的循环,并从df1一次提取一列,但我觉得这很慢,可能不是最有效的方法。
答案 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
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