我有以下数据框:
data = [['BALANCED', 'Corp EUR'], ['YIELD', 'Corp USD'], ['GROWTH', 'HG CHF']]
df = pd.DataFrame(data, columns=['STRATEGY', 'ASSET_CLASS']
df
STRATEGY ASSET_CLASS
0 BALANCED Corp EUR
1 YIELD Corp USD
2 GROWTH HG CHF
我的目标是根据“策略”列中的值从具有多个值的字典中分配特定值。包含不同资产类别的字典如下所示:
my_dict = {'HG CHF': [5, 2, 3, 4],
'Corp EUR': [4, 6, 8, 7],
'Corp USD': [9, 7.5, 5.3, 6],
}
my_dict
{'HG CHF': [5, 2, 3, 4],
'Corp EUR': [4, 6, 8, 7],
'Corp USD': [9, 7.5, 5.3, 6]}
在字典中,每个值描述一个特定的策略。在这种情况下,YIELD 包括所有第二个值,BALANCED 包括所有第三个值,GROWTH 包括所有第四个值。本质上,我想要获得的是以下输出:
STRATEGY ASSET_CLASS TARGET
0 BALANCED Corp EUR 8.0
1 YIELD Corp USD 7.5
2 GROWTH HG CHF 4.0
如何正确告诉Python要访问字典中的哪个值?下面的命令映射了所有值:
df['TARGET'] = df['ASSET_CLASS'].map(my_dict)
STRATEGY ASSET_CLASS TARGET
0 BALANCED Corp EUR [4, 6, 8, 7]
1 YIELD Corp USD [9, 7.5, 5.3, 6]
2 GROWTH HG CHF [5, 2, 3, 4]
非常感谢任何建议!非常感谢!
可以使用如下方法在 Pandas 中将具有多个值的字典映射到 DataFrame:
import pandas as pd
data = [['BALANCED', 'Corp EUR'], ['YIELD', 'Corp USD'], ['GROWTH', 'HG CHF']]
df = pd.DataFrame(data, columns=['STRATEGY', 'ASSET_CLASS'])
my_dict = {'HG CHF': [5, 2, 3, 4],
'Corp EUR': [4, 6, 8, 7],
'Corp USD': [9, 7.5, 5.3, 6],
}
# 创建一个策略到索引的映射
strategy_map = {'BALANCED': 2, 'YIELD': 1, 'GROWTH': 3}
# 使用 lambda 函数应用映射
df['TARGET'] = df.apply(lambda row: my_dict[row['ASSET_CLASS']][strategy_map[row['STRATEGY']] - 1], axis=1)
print(df)
这将打印出:
STRATEGY ASSET_CLASS TARGET
0 BALANCED Corp EUR 8.0
1 YIELD Corp USD 7.5
2 GROWTH HG CHF 4.0
以下是代码的工作原理:
- 创建策略到索引的映射:
-
我们创建了一个字典
strategy_map
,它将每个策略映射到my_dict
值列表中的相应索引(从 1 开始)。 -
使用
apply()
和 lambda 函数: -
我们使用
df.apply()
在 DataFrame 的每一行上应用 lambda 函数。 -
lambda 函数接收每一行作为
row
。 -
它使用
row['ASSET_CLASS']
访问my_dict
中相应的列表。 -
然后,它使用
strategy_map[row['STRATEGY']] - 1
获取策略的正确索引,并从列表中检索相应的值。
这将确保根据
STRATEGY
列中指定的值选择正确的值。