根据条件

时间:2018-12-04 21:43:46

标签: python pandas

   temperature  precipitation
0         1.26         0.0279
1         1.64         0.0330
2         1.98         0.0381
3         2.31         0.0406
4         2.61         0.0406
5         2.89         0.0381
6         3.15         0.0356
7         3.51         0.0305
8         3.78         0.0305
9         3.78         0.0305

在上面的数据框中,我想创建一个新列C,其中precipitation小于0.04后,4行的值是1,而这4行中的precipitation小于大于0.04。我尝试使用pd.where,但这仅设置当前行的值。

预期输出:

enter image description here

1 个答案:

答案 0 :(得分:1)

IIUC,以下;

创建列“ C”并填充nan

df['C'] = np.nan

计算“ C_”列中连续出现的“降水” <0.04:

def rolling_count(val):
    if val < 0.04:
        rolling_count.count +=1
    else:
        rolling_count.count = 0
    return rolling_count.count
rolling_count.count = 0

df['C_'] = df['precipitation'].apply(rolling_count)

在列“ C”中填充“ 1”,找到第一个“ 4”,然后向后填充其他3:

df.loc[df[df['C_'] == 4].head(1).index.item(), 'C'] = 1
df['C'] = df['C'].fillna(method = 'bfill', limit = 3)
df['C'] = df['C'].fillna(0)
df['C'] = df['C'].astype(int)

df

   temperature  precipitation  C  C_
0         1.26         0.0279  0   1
1         1.64         0.0330  0   2
2         1.98         0.0381  0   3
3         2.31         0.0406  0   0
4         2.61         0.0406  0   0
5         2.89         0.0381  1   1
6         3.15         0.0356  1   2
7         3.51         0.0305  1   3
8         3.78         0.0305  1   4
9         3.78         0.0305  0   5

注意;此结果与您的示例显示的结果不同,但是IIUC您需要找到0.04以下的4个连续行并填充'C'。问题是您的“ C”中的“ 0.0406”值填充为“ 1”,且不低于0.04。