根据条件修改大熊猫数据框

时间:2019-11-20 20:52:08

标签: python pandas dataframe

我正在尝试使用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。

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

This is what df looks like

2 个答案:

答案 0 :(得分:0)

如果您的数据框名为df,则可以尝试:

mask = (df.n1 - df.n2 > 0.3) & (df.n3 >= (0.9*df.n1))
df.n2.where(~mask, (df.n1 + df.n3) / 2)

答案 1 :(得分:0)

我假设您要对数据框的每一列执行此过程。 这与我创建的用于复制过程的伪数据框一起使用:

# 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])