首页 > 解决方案 > 根据条件修改 Wide Pandas 数据框

问题描述

我正在尝试使用 pandas 库根据 python 中的条件编辑各种时间序列数据的值。数据是给定日期的卫星观测值(见下图)。第一列是唯一的 id,所有后续列都是日期值。这意味着每一行都是该特定 ID 的时间序列。

这个想法是这样的:

如果n1是当前观测值,n2是下一个观测值,n3是之后的观测值,则:

if ((n2 - n1) > 0.3) and (n3 >= (0.9 * n1)):
    n2 = (n1 + n3) / 2

需要明确的是,n1、n2、n3 是该数据帧的前三个值,而不是属性。对于附加的示例,n1 将是 0.25916876,n2 将是 0.25916876,n3 将是 0.23824187。

如何使用此规则修改我的数据框?这可以通过列表理解来完成吗?

这就是 df 的样子

标签: pythonpandasdataframe

解决方案


我假设您想对数据框的每一列执行此过程。这是使用我创建的用于复制该过程的假数据框:

# Iterate over each column
for c in list(df):
    df[c] = np.where((df[c]-df[c].shift(1, fill_value=0)>0.3) &
                     (df[c].shift(-1, fill_value=0) > 0.9*df[c].shift(1, fill_value=0)), 
                     np.mean(df[c].shift(-1, fill_value=0),df[c].shift(1, fill_value=0)), 
                     df[c])

推荐阅读