目的
avg_tot_assets
其中 avg_tot_assets =(上年资产+当年资产)/ 2 return_on_asset
(ROA)= net income
/ avg_total_assets
APPROACH
工作代码
df = data[['per_fisc_year',
'consol_net_income_loss',
'tot_asset',
'curr_portion_debt',
'tot_lterm_debt',
'tot_share_holder_equity']]
df
输出
问题
return_on_asset
时并行计算avg_tot_asset
,还是必须独立运行?答案 0 :(得分:3)
关于第一个问题,请查看Pandas Window Functions。这将处理您的avg_tot_assets
:
df['avg_tot_assets'] = df.tot_asset.rolling(window=2).mean()
就并行计算另一列而言,可能有一种方法,但这样做不太可能获得任何性能。你会更好地顺序完成它。像这样:
df['ROA'] = df.net_income / df.avg_tot_assets
您可以尝试浪费大量时间编写一个复杂的函数,该函数将逐行遍历数据帧并依次计算每个值,然后将输出应用于原始数据帧,但这将是 DRASTICALLY 比内置方法慢。
答案 1 :(得分:0)
作为窗口函数的替代方法,您可以使用 df['avg_tot_assets'] = df['tot_asset'].add(df['tot_asset'].shift(1)) / 2
获取列的先前值:
df['ROA'] = df['consol_net_income_loss'] / df['avg_tot_assets']
对于 ROA 计算来说没有什么新东西。我想 pandas/numpy 可以矢量化该计算:
use Shopware\Core\Checkout\Cart\Event\BeforeLineItemAddedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class AddDataToPage implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return [BeforeLineItemAddedEvent::class => 'onLineItemAdded'];
}
/**
* @param onLineItemAdded $event
* @throws \Shopware\Core\Checkout\Cart\Exception\InvalidPayloadException
*/
public function onLineItemAdded(BeforeLineItemAddedEvent $event)
{
$lineitems = $event->getLineItem();
// I need a [IF] here: if product has a variation and parent product id is the same add the code below
$lineitems->setPayloadValue("myVar", "test2");
}