Pandas从字典映射到DataFrame

2024-09-20 23:01:37 发布

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

我目前正在通过以下函数将各种字符串值映射并重命名为pandas中的列:

df["fundbenchmark"] = df["name"].map(lambda x: "American Express" if "AXP" in x else "Apple" if "AAPL" in x else "Google" if "GOOG" in x else "")

不过,我将对多个列和许多不同的重命名执行此操作。这是另一个具有相同内容的专栏,因此在那里添加所有公司也是重复的。在

^{pr2}$

因此,我想维护一个字典,比如:

companies = {"AXP": "American Express", "AAPL": "Apple", "GOOG": "Google"}

当我需要绘制公司名称时,可以调用它。我如何使它map来匹配companies而不是{}?在


当前数据帧:

Name              
"BULL AXP UN X3 VON"
"BEAR AXP UN X3 VON"
"BULL GOOG UN X5 VON"
"BEAR GOOG UN X5 VON"
"BEAR ABC123 X2 CBZ"

期望输出:

Name                    Fundbenchmark             Subclass
"BULL AXP UN X3 VON"      "American Express"      "American Express"
"BEAR AXP UN X3 VON"      "American Express"      "American Express"
"BULL GOOG UN X5 VON"     "Google"                "Google"
"BEAR GOOG UN X5 VON"     "Google"                "Google"
"BEAR ABC123 X2 CBZ"      "BEAR ABC123 X2 CBZ"    "BEAR ABC123 X2 CBZ" #Not in Dictionary

字典:

companies = {"AXP": "American Express", "GOOG": "Google"} 

所以,如果字典中存在缩写,那么就把这个名字写到其他列中。在

如果整个单元格中的缩写不重复,则为整个单元格。在


Tags: ingoogleungoogbearx2americanexpress
3条回答

我怀疑这是最优雅的方式,但它应该能做到:

df['fbm'] = df['name']
for i in companies:
    df.loc[ df.name.str.contains(i), 'fbm' ] = companies[i]

                  name                 fbm
0   BULL AXP UN X3 VON    American Express
1   BEAR AXP UN X3 VON    American Express
2  BULL GOOG UN X5 VON              Google
3  BEAR GOOG UN X5 VON              Google
4   BEAR ABC123 X2 CBZ  BEAR ABC123 X2 CBZ

这里要记住的一点是,因为这不是字典查找,所以可以有多个匹配项。例如,“ABC”和“UN”都是有效的股票代码,“BEAR”是或曾经是。使用此方法,将保留最后一个匹配项,并丢弃任何先前的匹配项。在

您可以使用map

Current DataFrame:

Name              
"BULL AXP UN X3 VON"
"BEAR AXP UN X3 VON"
"BULL GOOG UN X5 VON"
"BEAR GOOG UN X5 VON"
"BEAR ABC123 X2 CBZ"


companies = {"AXP": "American Express", "GOOG": "Google"} 

我们创建一个新列,从列中提取股票代码。在

^{pr2}$

然后,我们使用将字典companies映射到tickers来创建一个列,其中包含股票代码符号的名称:

df['Ticker_Name'] = df['Tickers'].map(companies)

使用替换:

http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.replace.html

 df = pd.DataFrame({'A':['string1','string2','string3'],
                 'B':['StringA','StringB','StringC']})

创建:

^{pr2}$

然后在字典中映射替换项:

to_replace = {'string1':'replace1','StringC':'replaceC'}

然后更换:

 df.replace(to_replace)
          A         B
0  replace1   StringA
1   string2   StringB
2   string3  replaceC

相关问题 更多 >

    热门问题