【发布时间】:2019-03-11 08:46:47
【问题描述】:
我有以下数据框:
df = pd.DataFrame([['Person1', 'CT', 2017],
['Person2', 'FL', 2017],
['Person3', 'TX', 2017],
['Person1', 'TX', 2016]], columns=['Name', 'State', 'Year'])
还有下面两个映射表:
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。
最终的输出应该是这样的:
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
我尝试了以下代码,但没有成功。
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().
【问题讨论】: