根据其他两列是否匹配向新列添加值

2024-09-28 01:32:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个看起来像这样的数据帧(df1)

^{tb1}$

…然后继续进行44000多行。我有另一个数据帧(df2),看起来像这样

^{tb2}$

…包含所有在纳斯达克和纽约证券交易所上市的股票。然而,我现在想做的是在df1中的“stock_name”列中添加股票的符号。为此,我想将df1[title]与df2[Symbol]匹配,然后根据标题中匹配的符号,将相应的股票名称(df2[Company name])添加到df1[stock_name]列中。如果标题中有多个股票名称,我想使用前面提到的第一个

有什么简单的方法可以做到这一点吗


Tags: 数据方法name标题titlestock符号symbol
2条回答

首先,我认为您应该基于df2创建一个字典

symbol_lookup = dict(zip(df2['Symbol'],df2['Company name']))

然后需要一个函数来解析title列。如果您可以依赖股票符号前面带有美元符号,则可以使用以下符号:

def find_name(input_string):
    for symbol in input_string.split('$'):
        #if the first four characters form 
        #a stock symbol, return the name
        if symbol_lookup.get(symbol[:4]):
            return symbol_lookup.get(symbol[:4])
        #otherwise check the first three characters
        if symbol_lookup.get(symbol[:3]):
            return symbol_lookup.get(symbol[:3])

您还可以编写一个函数,其基础是希望符号位于括号中。如果你不能依赖其中任何一个,那就更复杂了

最后,您可以将函数应用于title列:

df1['Stock_name'] = df1['title'].apply(find_name)

我尝试使用这个小数据集,它正在工作,如果您有一些问题,请告诉我

df1 = pd.DataFrame({"title" :   ["Biocryst ($BCRX) continues to remain undervalued", "AAPL is good, buy it"], 'score' : [120,420]   , 'Stock_name' : ["",""]    })
df2 = pd.DataFrame({'Company name' : ['BioCryst Pharmaceuticals, Inc.','GameStop','Apple Inc.'], 'Symbol' : ["BCRX","GME","AAPL"]})

df1
                                               title    score   Stock_name
0   Biocryst ($BCRX) continues to remain undervalued    120 
1   AAPL is good, buy it                                420


df2
                     Company name   Symbol
0   BioCryst Pharmaceuticals, Inc.  BCRX
1   GameStop                        GME
2   Apple Inc.                      AAPL

for j in range(0,len(df2)):
  for i in range(0,len(df1)):
    if df2['Symbol'][j] in df1['title'][i]:
      df1['Stock_name'][i] = df2['Symbol'][j]


df1

                                               title    score   Stock_name
0   Biocryst ($BCRX) continues to remain undervalued    120     BCRX
1   AAPL is good, buy it                                420     AAPL

相关问题 更多 >

    热门问题