繁体   English   中英

将两个数据帧相乘 Python

[英]Multiply two data frames Python

我有两个数据框:

边距:

margins = pd.DataFrame([{'balance_date': '2019-06-24', 'opp_pty_cd': 'GOODM','cur': 'KRW', 'amt':9714190.0,'acct': 30}, {'balance_date': '2019-06-24', 'opp_pty_cd': 'KIS','cur': 'KRW', 'amt':1858386321.,'acct': 30}])

速度:

    dict={'CME':{u'JPY': 0.525, u'USD': 3.305, u'CNH': 4.805},
    'EUREX':{u'USD': 3.305, u'GBP': 1.545, u'EUR': 0.375},
    'GOODM':{u'KRW': 0.0},
    'HKEX':{u'USD': 3.395, u'HKD': 3.565, u'CNH': 4.895},
    'KIS':{u'KRW': 0.0},
    'NLFX':{u'USD': 3.305},
    'OSE':{u'JPY': 0.615},
    'SGX':{u'JPY': 0.725, u'USD': 2.605, u'SGD': 2.575, u'CNH': 5.005, u'CNY': 0.0},
    'TOCN':{u'JPY': 0.525}}
rate=pd.DataFrame.from_dict(dict)

我需要将两个数据帧相乘,例如边距中的 amt 需要与正确的 opp_pty_cd 和 cur 相乘。

当我尝试这个时:

margins['amt'] = margins['amt']* rate[margins['opp_pty_cd']][KIS_margins['cur']]

我收到此错误:

KeyError: "[u'KRW' u'KRW'] not in index"

我认为您首先需要DataFrame.reindex来添加缺少的索引和列值(值是NaN ),因此可以使用DataFrame.lookup

rate1 = rate.reindex(index=margins['cur'].unique(), columns=margins['opp_pty_cd'].unique())
margins['amt'] = margins['amt'] * rate1.lookup(margins['cur'], margins['opp_pty_cd'])
print (margins)
   acct  amt balance_date  cur opp_pty_cd
0    30  0.0   2019-06-24  KRW      GOODM
1    30  0.0   2019-06-24  KRW        KIS

这不是简单的答案,但我希望它能对您有所帮助,因为这是我想对DataFrames进行深度数学运算时可以使用的选项:

Pandas是基于Numpy的,这非常酷,因为numpy受益于C来使瓶颈更快

  1. df到np和乘法:

    [输入]:数据= [[3,3,3],[2,2,2],[1,1,1]] df = pd.DataFrame(data)array = df.values column_array = df [0] .values

    打印(数组)[[3 3 3] [2 2 2] [1 1 1]]

    打印(类型(数组))

    打印(column_array)[3 2 1]

    打印(类型(column_array))

现在,您不仅可以乘法,而且可以受益于所有Numpy功能

  1. 不过,能够自己乘以数据帧总是有用的:

我认为@jezrael的回答很好。 您的代码还可以,但是您可能需要过滤数据才能乘以数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM