大数据上的次优for循环

2024-09-29 23:25:34 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我有一个包含数千行的DataFrame包含人工外汇交易数据。前十行如下所示:

enter image description here

我想迭代这个集合,并为每一行计算CommonCurrency,在本例中为USD。因此,对于每一行,我遍历CurrencyPairDeskRateOrderQty列并计算CommonCurrency

for i in range(len(order_data)):
    if (order_data['CurrencyPair'][i] == 'GBP/USD'):
        order_data['CommonCurrency'][i] = order_data['DeskRate'][i] * 
        order_data['OrderQty'][i] 
    elif (order_data['CurrencyPair'][i] == 'AUD/USD'):
        order_data['CommonCurrency'][i] = order_data['DeskRate'][i] * 
        order_data['OrderQty'][i]
    elif (order_data['CurrencyPair'][i] == 'EUR/USD'):
        order_data['CommonCurrency'][i] = order_data['DeskRate'][i] * 
        order_data['OrderQty'][i]
    elif (order_data['CurrencyPair'][i] == 'USD/CHF'):
        order_data['CommonCurrency'][i] = order_data['DeskRate'][i] / 
        order_data['OrderQty'][i]
    elif (order_data['CurrencyPair'][i] == 'EUR/GBP'):
        order_data['CommonCurrency'][i] = #different calculation

这似乎不是正确的做法,尤其是在存在大量不同货币对的情况下。我遇到的另一个问题是当我到达EUR/GBP时,因为现在我必须从GBP/USDEUR/USD获取DeskRate,我看不出我如何使用这个方法

有什么提示吗


Tags: 数据dataframedataordereur人工usdgbp
1条回答
网友
1楼 · 发布于 2024-09-29 23:25:34

熊猫的一个有趣特征是indexing的概念。有更多类似python的方法可以做到这一点,但是使用loc,您可以使用series(columns)为数据帧的一部分赋值:

order_data.loc[order_data['CurrencyPair'].isin(('GBP/USD', 'AUD/USD', 'EUR/USD')), 'CurrencyPair'] = order_data['DeskRate'] * order_data['OrderQty']
order_data.loc[order_data['CurrencyPair'] == 'USD/CHF', 'CurrencyPair'] = order_data['DeskRate'] / order_data['OrderQty']
order_data.loc[order_data['CurrencyPair'] == 'EUR/GBP', 'CurrencyPair'] = some_func(order_data['DeskRate'], order_data['OrderQty'])

从而避免任何for循环

相关问题 更多 >

    热门问题