本文介绍了 pandas 根据来自另一列的值来映射列数据,并使用if来确定要使用哪个字典的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下数据框:

df = pd.DataFrame([['Person1', 'CT', 2017],
               ['Person2', 'FL', 2017],
               ['Person3', 'TX', 2017],
              ['Person1', 'TX', 2016]], columns=['Name', 'State', 'Year'])

以及下面的两个映射表:

And two mapping tables below:

state_map = {'CT': 'Connecticut', 'FL': 'Florida', 'TX':'Texas'}
state_map2 = {'CT': 'ABC-CT', 'FL': 'BBC-Florida', 'TX':'CDA-TX'}

数据如下所示:

    Name    State   Year
0   Person1   CT    2017
1   Person2   FL    2017
2   Person3   TX    2017
3   Person1   TX    2016

我想找到一种添加新列的方法,该列使用if条件确定是否使用从state_map或state_map2映射的值映射的值.因此,如果df [df ['Name'] =='Person1'],则使用state_map,否则使用state_map2.

I would like to find a way to add a new column with values mapped using an if condition that determines whether to use values mapped from state_map or state_map2. So if df[df['Name']=='Person1'] then use state_map else use state_map2.

最终输出应如下所示:

    Name    State   Year   New_State_Name
0   Person1   CT    2017   Connecticut
1   Person2   FL    2017   BBC-Florida
2   Person3   TX    2017   CDA-TX
3   Person1   TX    2016   Texas

我尝试了以下代码,但是没有用.

I tried the following code but it didn't work.

df['New_State_Name'] = [state_map[x] if df[df['Name'] == 'Person1'] else 
state_map2[x] for x in df['State']]

我看到一条错误消息:

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, 
a.bool(), a.item(), a.any() or a.all().

推荐答案

使用 np.where :

df['New_State_Name'] = np.where(df['Name']=='Person1',df['State'].map(state_map),df['State'].map(state_map2))

输出:

      Name State  Year New_State_Name
0  Person1    CT  2017    Connecticut
1  Person2    FL  2017    BBC-Florida
2  Person3    TX  2017         CDA-TX
3  Person1    TX  2016          Texas

这篇关于 pandas 根据来自另一列的值来映射列数据,并使用if来确定要使用哪个字典的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-02 12:40