【发布时间】:2021-02-26 15:12:45
【问题描述】:
我有一个包含数千列的 pandas 数据框,我想对数据框的每一列执行以下操作:
- 检查
i-th 和i-1-th 值是否在范围内(x和y之间); - 如果满足#1,则查找该列的
log(i/i-1) ** 2; - 如果不满足#1,则假设为0;
- 求每列的总和 #2。
这是一个只有一列的数据框:
d = {'col1': [10, 15, 23, 16, 5, 14, 11, 4]}
df = pd.DataFrame(data = d)
df
x = 10 和 y = 20
这是我可以为这一列做的事情:
df["IsIn"] = "NA"
for i in range(1, len(df.col1)):
if (x < df.col1[i] < y) & (x < df.col1[i - 1] < y):
df.IsIn[i] = 1
else:
df.IsIn[i] = 0
df["rets"] = np.log(df["col1"] / df["col1"].shift(1))
df["var"] = df["IsIn"] * df["rets"]**2
Total = df["var"].sum()
Total
理想情况下,每列都有一个Totals 的(1 x n-cols)数据框。我怎样才能最好地做到这一点?如果您能用详细的解释补充您的答案,我也将不胜感激。
【问题讨论】:
标签: pandas function dataframe iteration apply