从数据框中选择列

问题描述

我有一个ID为列名的1000支股票的月收益的数据框。 monthly returns

我只需要选择与另一个数据框中包含我想要的ID的值匹配的列即可。

permno list

我确信这确实很简单,但是我已经苦苦挣扎了2天,如果有人有一个简单的解决方案,将非常感谢。谢谢。

解决方法

您可以将单列permno列表数据帧(osr_curr_permnos)转换为列表,然后使用该列表从主数据帧(all_rets)中选择某些列。

要将osr_curr_permnos列“ 0”转换为列表,可以使用.to_list()

然后,您可以使用该列表对all_rets和.copy()进行切片,以将其的新副本复制到新的数据框中。

python代码可能类似于:

keep = osr_curr_permnos['0'].to_list() 
selected_rets = all_rets[keep].copy() 

“ keep”将是一个列表,“ selected_rets”将是您的新数据框。

如果osr_curr_permnos有重复的机会,则需要将其过滤掉:

keep = osr_curr_permnos['0'].drop_duplicates().to_list()
selected_rets = all_rets[keep].copy()
,

如我所料,答案比我做的要简单。基本上,我需要在permnos列表中获取整数值,并将其重铸为字符串。

osr_curr_permnos['0'] = osr_curr_permnos['0'].apply(str)
keep = osr_curr_permnos['0'].values

然后,我可以使用它从我的return数据框中选择具有字符串值作为列标题的列。

all_rets[keep]

这只是int vs. string的不匹配。