带2个元素和拉链的环

2024-06-08 06:59:31 发布

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

一位朋友寄给我一本Jupyter笔记本,上面有以下代码:

for stock_df, allo in zip((aapl, cisco, ibm, amzn), [.3,.2,.4,.1]):
    stock_df['Allocation'] = stock_df['NormedReturn']*allo

我理解输出,因为它在每个数据帧“aapl”、“cisco”中创建了一个新列“Allocation”。。。并将权重应用于标准回报。但是,我对语法理解不够,我不能自己再做一遍。你知道吗

2个元素上的for循环和zip如何工作?(我认为压缩时元素的长度必须相似,否则输出数据将被截断)。你知道吗


Tags: 数据代码in元素dfforstock朋友
2条回答

这看起来像是一种投资组合多样化的代码。aapl、cisco、ibm和amzn是至少包含NormedReturn字段的数据帧。你知道吗

aapl = pd.DataFrame({'NormedReturn':[1,2,3]})
cisco = pd.DataFrame({'NormedReturn':[4,5,6]})
ibm = pd.DataFrame({'NormedReturn':[7,8,9]})
amzn = pd.DataFrame({'NormedReturn':[10,11,12]})

数据帧也可以包含单个值,比如'NormedReturn':[13],没问题。你知道吗

拉链功能可将可折叠物品拉到一起。它将给定的分配权重分配给这些收益;将.3权重分配给aapl股票,将.2权重分配给cisco股票,等等:

for stock_df, allo in zip((aapl, cisco, ibm, amzn), [.3,.2,.4,.1]):
    print stock_df, allo

提供股票收益和相应的分配权重:

   NormedReturn
0             1
1             2
2             3 0.3
   NormedReturn
0             4
1             5
2             6 0.2
   NormedReturn
0             7
1             8
2             9 0.4
   NormedReturn
0            10
1            11
2            12 0.1

最后,分配将返回序列乘以分配权重:

for stock_df, allo in zip((aapl, cisco, ibm, amzn), [.3,.2,.4,.1]):
    stock_df['Allocation'] = stock_df['NormedReturn']*allo
    print stock_df

给出您的分配,即返回*权重系列:

   NormedReturn  Allocation
0             1         0.3
1             2         0.6
2             3         0.9
   NormedReturn  Allocation
0             4         0.8
1             5         1.0
2             6         1.2
   NormedReturn  Allocation
0             7         2.8
1             8         3.2
2             9         3.6
   NormedReturn  Allocation
0            10         1.0
1            11         1.1
2            12         1.2

我认为在这之后,你的朋友必须把所有的标准回报和分配放在一起,就像你的最终投资组合回报。你知道吗

Python语法的关键是^{}函数。你知道吗

从文件中,我们可以看到:

Returns an iterator of tuples, where the i-th tuple contains the i-th element from each of the argument sequences or iterables.

因此,它是通过iterables和'拉链'他们在一起。举例来说,这可能更容易看出:

>>> a = [1, 2, 3, 4]
>>> b = [9, 8, 7, 6]
>>> list(zip(a, b))
[(1, 9), (2, 8), (3, 7), (4, 6)]

因此,在您的代码中,这是与一个名为“tuple unpacking”的方法一起使用的,该方法的作用如下:

>>> i, j = 5, 6
>>> i
5
>>> j
6

这允许干净的代码遍历从zip()返回的元组。如果您仍然不确定循环在做什么,我们可以将其修改为print变量(为简单起见,我还将传递到zip的变量转换为字符串):

for stock_df, allo in zip(('aapl', 'cisco', 'ibm', 'amzn'), [.3,.2,.4,.1]):
    print(stock_df, allo)

你可以从输出中看到我们所期望的:

aapl 0.3
cisco 0.2
ibm 0.4
amzn 0.1

我希望这能帮你清理代码,从你问这个问题的方式来看,你已经知道这些变量实际上是如何在循环中被处理的,所以我就不谈了。你知道吗

相关问题 更多 >

    热门问题