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
,但这仅设置当前行的值。
预期输出:
答案 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。