python - 如何使用嵌套字典映射数据框中的列?

标签 python pandas dictionary

我为某些交易策略创建了这个嵌套字典,例如:

{'Strategy1' :{'AAPL':'Strategy1_APPLE', 'MSFT':'Strategy1_MICROSOFT'}, 'Strategy2' :{'AAPL': 'Strategy2_APPLE', 'MSFT':'Strategy2_MICROSOFT'}}

我已经构建了一个数据框,其中包含属于策略 1 或策略 2 的交易列表,并用该信息制作了一个专栏。然后我想做的是根据顶级键(即策略1或策略2)和嵌套键(即AAPL或MSFT)将字典中的值映射到新列。这样,每笔交易都在数据框的同一行中附有正确的策略和代码。

因此,数据框中包含 Strategy1 和 AAPL 的行在新列中获得的值为 Strategy1_APPLE,但 Strategy2 和 AAPL 获得的值为 Strategy2_APPLE。

我一直在使用 map() 和一堆 lambda 函数,但我无法让它工作。我认为这是可能的,不需要做一堆丑陋的循环和 if 语句,我真的可以使用一些关于如何在这里做到这一点的帮助。

编辑:示例

所以目前看起来像这样

  ticker Strategies
1   AAPL  Strategy1
2   MSFT  Strategy1
3   MSFT  Strategy2
4   AAPL  Strategy1
5   MSFT  Strategy2

想要的结果是这样的

  ticker Strategies          substrategy
1   AAPL  Strategy1      Strategy1_APPLE
2   MSFT  Strategy1  Strategy1_MICROSOFT
3   MSFT  Strategy2  Strategy2_MICROSOFT
4   AAPL  Strategy1      Strategy1_APPLE
5   MSFT  Strategy2  Strategy2_MICROSOFT

请注意,连接字符串或类似的东西对我的实际问题不起作用,因为基底名称要复杂得多

最佳答案

使用方法:

def get_substrategy(t,s):    
    v = mydict[s][t] 
    return v

然后应用 lambda:

df['substrategy'] = df.apply(lambda x: get_substrategy(x['ticker'], x['Strategies']), axis=1)

想要的结果

   ticker   Strategies  substrategy
1   AAPL    Strategy1   Strategy1_APPLE
2   MSFT    Strategy1   Strategy1_MICROSOFT
3   MSFT    Strategy2   Strategy2_MICROSOFT
4   AAPL    Strategy1   Strategy1_APPLE
5   MSFT    Strategy2   Strategy2_MICROSOFT

注意:如果策略/股票代码不存在,请确保在您的函数中尝试 catch

注2:没有该功能:

df['substrategy'] = df.apply(lambda x: mydict[x['Strategies']][x['ticker']], axis=1)

但您需要考虑策略/代码不存在的情况。

关于python - 如何使用嵌套字典映射数据框中的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60022339/

相关文章:

python - uuid.uuid1、uuid_generate_time 和线程

python - tensorflow 'features' 格式

python - Pandas:将数据帧转换为相邻行的数据帧列表

python - 在多维字典中找到最大值,最小值

java - 榛卡斯特 map : remove entries owned by the node that goes down

Python - 如果字典中的值那么

Python pymssql连接字符串使用变量

python - 图像中的 turtle 不会覆盖另一只 turtle 的印记

python - 处理具有多个数据分析值的 pandas 列

python - 为什么 loc 和 iloc 对 pandas DataFrame 的行进行切片的工作方式不同?