我从较大的数据框中提取了以下内容:
Here "id" is not a primary key.
目标是创建一个列“ D”,其中对于大于“ X”的索引,程序必须在“类型”列中搜索最后n个值,并仅对那些标识为“ DM”的值进行计数。
例如,如果“ x”和“ n”分别为5,则我希望这样:
df = pd.DataFrame({'Tipe': ['DM','DM','DM','DS','DS','DI','DI','DM','DI','DS','DM','DM','DM','DM','DI','DM','DM','DS','DS','DS','DM']})
我尝试使用“ .tail”,但尝试使用整列中现有的'DM'值,而不仅仅是最后n个值中的值。
答案 0 :(得分:2)
将pandas.Series.shift
和rolling
与where
一起使用:
x = 5
n = 5
s = df["Type"].eq("DM").shift().rolling(n).sum()
df["D"] = s.where(s.index > x)
输出:
Type D
0 DM NaN
1 DM NaN
2 DM NaN
3 DS NaN
4 DS NaN
5 DI NaN
6 DI 2.0
7 DM 1.0
8 DI 1.0
9 DS 1.0
10 DM 1.0
11 DM 2.0
12 DM 3.0
13 DM 3.0
14 DI 4.0
15 DM 4.0
16 DM 4.0
17 DS 4.0
18 DS 3.0
19 DS 2.0
20 DM 2.0