我有一个数据帧,其中包含日期作为行,列作为特定日期(“n$investment”)中的每个股票的日期。另外,我有一个系列("portT"),其中包含每个日期所有股票的总投资总和(系列大小: len(ndate)*1)。以下代码通过将ndate每行的每个元素除以当天的总和来计算每个股票/每个日期的权重:
(l,w)=port1.shape
for i in range(0,l):
port1.iloc[i]=np.divide(ndate.iloc[i],portT.iloc[i])代码运行很慢,你能告诉我如何修改和加速它吗?我试图通过矢量化来做到这一点,但没有成功。
发布于 2018-05-15 16:04:00
因为这只是两个相同形状的数据帧的简单划分(或者你可以这样定义它),你可以使用简单的/-operator,pandas将以元素的方式执行它(如果形状不匹配,可能会进行复制,所以要确保):
import pandas as pd
df1 = pd.DataFrame([[1,2], [3,4]])
df2 = pd.DataFrame([[2,2], [3,3]])
df_new = df1 / df2
#>>> pd.DataFrame([[0.5, 1.],[1., 1.3]])这很可能是在内部执行您在示例中指定的相同操作,但是,内部赋值和检查是绕过的,这应该会给您带来一些速度
编辑:我对你的问题的描述是错误的;也许下一次可以包含一个最小的自包含代码示例。不过,/-operator也适用于数据帧和系列的组合:
import pandas as pd
df = pd.DataFrame([[1,2], [3,4]])
s = pd.Series([1,2])
new_df = df / s
#>>> pd.DataFrame([[1., 3.],[1., 2]])https://stackoverflow.com/questions/50344917
复制相似问题