有人可以用 Python 中的迭代来解释 axis=0 或 1 吗? [复制]
Posted
技术标签:
【中文标题】有人可以用 Python 中的迭代来解释 axis=0 或 1 吗? [复制]【英文标题】:Could someone explain axis=0 or 1 with iteration in Python? [duplicate] 【发布时间】:2019-11-30 02:41:02 【问题描述】:我正在处理一个班级项目,并在此处粘贴了代码。它创建了 3 个股票数据、收盘价、交易量和股息数据框。所有数据都已被旋转,因此日期是索引,列是代码,值是前面提到的。该问题要求根据获取每只股票中现金的百分比来创建权重指数(因此每个日期的价格 x 交易量/总和(特定股票所有日期的价格 x 交易量)(注意:这就是我们的方式告诉根据说明计算权重)。我在函数中编写了代码,但最初我设置了axis = 0,因为这会将每列中的值相加(向下迭代行)。但是,这个答案没有被接受,正确答案是轴 = 1。这对我来说毫无意义,因为这会将给定日期的每只股票的价格相加,而不是给定股票的所有日期,不是吗?我错过了什么吗?
df = pd.read_csv('../../data/project_3/eod-quotemedia.csv')
percent_top_dollar = 0.2
high_volume_symbols = project_helper.large_dollar_volume_stocks(df, 'adj_close', 'adj_volume', percent_top_dollar)
df = df[df['ticker'].isin(high_volume_symbols)]
close = df.reset_index().pivot(index='date', columns='ticker', values='adj_close')
volume = df.reset_index().pivot(index='date', columns='ticker', values='adj_volume')
dividends = df.reset_index().pivot(index='date', columns='ticker', values='dividends')
def generate_dollar_volume_weights(close, volume):
"""
Generate dollar volume weights.
Parameters
----------
close : DataFrame
Close price for each ticker and date
volume : str
Volume for each ticker and date
Returns
-------
dollar_volume_weights : DataFrame
The dollar volume weights for each ticker and date
"""
assert close.index.equals(volume.index)
assert close.columns.equals(volume.columns)
#TODO: Implement function
close_adj = close * volume
return close_adj.apply(lambda x: x/x.sum(), axis=1)
【问题讨论】:
完美解释:***.com/a/49884677/4551984 【参考方案1】:解释如下:
axis=1
逐行执行操作。
axis=0
逐列执行操作。
【讨论】:
我明白了。我没有得到的是我们被要求将数据框中的每个值除以该特定列的行中所有值的总和。因此,例如,如果全部有 5 行,并且第一列中的 5 个值中的每一个都是 1(所以一列有 5 个 1),那么我们希望返回一个数据帧,每个值都是 1/(1+1+ 1+1+1) 或该列的每个值的 1/5。所以不会在以下代码中使用axis = 0:df.apply(lambda x: x/x.sum(), axis=1)
但是课程说axis = 1是正确的以上是关于有人可以用 Python 中的迭代来解释 axis=0 或 1 吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章