我继承了一个VBA代码,我想将其转换为Python。
考虑一个suvrival矩阵,其中:
- 每一行都是不同的产品
- 每列表示产品的年龄
我想创建一个零的生存矩阵,然后在其中应用正态分布(age-life_exp)/sd,其中age是列的编号。
结果:我的DF lifeleft_2
中的数字本身是好的,但不是在正确的位置,结果的维度不好,lifeleft_2
的列索引被破坏。
问题:如何让SciPy返回每个“观察”的结果,而不是每个观察中的整个数组?
import pandas as pd
import numpy as np
from scipy.stats import norm
df = pd.DataFrame({'qty' : [20, 30, 40],
'price' : [100, 50, 20],
'life_exp' : [5, 4, 3]})
df['sd'] = df['life_exp'] / 4
nrows = df.shape[0]
ncols = df['life_exp'].max()*2 + 1 # "+1" because 0 = equals the past
# Survival matrix of zeros where column index = age, used for the normal distribution --> (age-life_exp) / sd
lifeleft = pd.DataFrame(np.zeros((nrows, ncols)))
l_cols = lifeleft.columns
# ---> PROBLEM IS HERE <---
lifeleft_2 = lifeleft.apply(lambda x: 1 - norm.cdf((col-df['life_exp']) / df['sd']) for col in l_cols)
display(lifeleft_2)
1条答案
按热度按时间db2dz4w81#