如何从股票月度收益DataFrame中匹配Permno列表筛选列?
快速筛选匹配列名的解决方案
别担心,这个问题其实超级容易解决,我给你两种最直接的方法,分分钟搞定!
方法一:提取目标列表后用isin()筛选
首先你需要把目标Permno列表从你的第二个DataFrame里提取出来,然后用isin()方法判断原DataFrame的列名是否在这个列表里,最后选择这些列就行:
# 假设你的目标Permno所在的列名叫'Permno',先把它转成列表 target_permnos = target_df['Permno'].tolist() # 筛选原收益DataFrame中列名匹配的列 filtered_df = stock_returns_df[stock_returns_df.columns[stock_returns_df.columns.isin(target_permnos)]]
方法二:用loc实现更简洁的列选择
如果你喜欢更紧凑的写法,用loc的列索引可以一步到位:
target_permnos = target_df['Permno'].tolist() filtered_df = stock_returns_df.loc[:, stock_returns_df.columns.isin(target_permnos)]
关键注意事项
- 一定要确保原DataFrame的列名类型和目标Permno的类型完全一致!比如如果原列名是字符串,而目标Permno是整数,匹配会失败。遇到这种情况可以统一转类型:
# 把目标Permno转成字符串,和原列名类型对齐 target_permnos = target_df['Permno'].astype(str).tolist() # 或者把原DataFrame的列名转成整数 stock_returns_df.columns = stock_returns_df.columns.astype(int)
内容的提问来源于stack exchange,提问作者Rob Roy
相关产品推荐
相关产品推荐

