Python 带有2个元素和一个拉链的循环
一位朋友寄给我一本Jupyter笔记本,上面有以下代码:Python 带有2个元素和一个拉链的循环,python,loops,Python,Loops,一位朋友寄给我一本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 stock_df, allo in zip((aapl, cisco, ibm, amzn), [.3,.2,.4,.1]):
stock_df['Allocation'] = stock_df['NormedReturn']*allo
我理解输出,因为它在每个数据帧“aapl”、“cisco”中创建了一个新列“Allocation”。。。并将权重应用于标准回报。但是,我对语法理解不够,无法自己再做一次
请问这对于2个元素上的循环和zip是如何工作的?(我认为压缩时元素必须具有相似的长度,否则输出数据将被截断)。这看起来像是一种代码。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],没有问题
拉链功能可将多个拉链拉在一起。它将给定的分配权重分配给这些收益。aapl库存重量为3,思科库存重量为2,等等:
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
我认为在此之后,您的朋友必须将所有的normedreturn和分配放在一起,这就像您的最终投资组合回报一样。这里Python语法的关键部分是函数 从文件中,我们可以看到: 返回
元组的迭代器,其中i-th
元组包含每个参数序列或i-th
元素
因此,它被传递到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
的变量转换为字符串):
您可以从输出中看到,这符合我们的预期:
aapl 0.3
cisco 0.2
ibm 0.4
amzn 0.1
我希望这能为您清除代码,从您提出的问题来看,您已经知道这些变量在循环中实际上是如何处理的,所以我不再赘述。看看python文档:有一个关于zip
的很好的解释。您压缩的对象将被截断,但是它们的长度是一样的:(aapl,cisco,ibm,amzn)
有长度3,[.3,.2,.4,.1]
@juanpa.arrivillaga length4
@JoeIddon-whoops。是的,打字错误。谢谢乔!现在更清楚了:)@choubix请接受(回答旁边的灰色-->绿色箭头)谢谢:)非常欢迎,@choubix!请随意将我或乔的答案标记为已接受的答案。圣诞快乐!
aapl 0.3
cisco 0.2
ibm 0.4
amzn 0.1