我试图基于另外2个DataFrames的两列的值创建一个DataFrame。
我希望新的DataFrame成为另一列(a)的所有值之间的一列(b)的值的份额,基于它们对该列(a)的加权贡献。
目前,我已经可以通过循环解决它。但是我想知道您是否能想到熊猫中的任何矢量化函数可以更快地解决这个问题?
a = pd.DataFrame(np.random.randint(1, 6, 700))
b = pd.DataFrame(np.random.randint(1, 6, 400))*1000
final_share = []
weight = a/a.sum()
for index, value in b.iterrows():
weighted_value = weight*b.iloc[index].item()
final_share.append(weighted_value)
final_share = pd.concat(final_share, axis = 1)
final_share.columns = b.index
答案 0 :(得分:2)
这是numpy
的基础。您需要外部产品:
import numpy as np
final_share = pd.DataFrame(np.outer(b, weight).T)
会更快。
贷记this异常
答案 1 :(得分:0)
使用df$selfassessment <- ifelse(df$selfassessment<5, 0, df$selfassessment-5)
:
numpy
或者:
arr = a[0].values
w = arr / arr.sum()
c = pd.DataFrame(w[:, None] * b[0].values)