我有一个pandas DF,它有两列,Day和Data,从csv文件中读取。
阅读之后,我添加了3列“条件0的天数”,1和2.例如,对于列'条件2的天数',我这样做:
DF['Days with condition 2'] = ''
DF['Days with condition 2'][DF['Data']==2]=1
我需要做什么,无法弄清楚如何计算'自条件以来的天数'0,1,2。例如,“条件2后的天数”应该在索引19中显示11,因为这是自上次条件被触发以来的行数(索引8)。有没有熊猫功能呢?
答案 0 :(得分:2)
从两个原始列开始
Day Data
0 1 1
1 2 0
2 3 0
3 4 0
4 5 0
5 6 0
6 7 1
7 8 0
8 9 2
9 10 0
10 11 0
11 12 1
12 13 0
13 14 0
14 15 0
15 16 1
16 17 0
17 18 1
18 19 0
19 20 2
20 21 0
21 22 0
22 23 0
以下是您如何填写条件2"的日子。使用布尔索引过滤2s。然后我们使用shift()减去前一天。
接下来的几个步骤会过滤第一次出现的2并更新"有条件2和#34的天数;等于Day,但它可能是你想要的任何东西
然后用fillna()摆脱NaNs。相同的模式可用于您要添加的其他两列
filter = (df["Data"] == 2)
df.loc[filter,"Days with condition 2"] = df[filter]["Day"] - df[filter]["Day"].shift(1)
filter = filter & (df["Days with condition 2"].isnull())
df.loc[filter,"Days with condition 2"] = df[filter]["Day"]
df = df.fillna(0)
df
Day Data Days with condition 2
0 1 1 0
1 2 0 0
2 3 0 0
3 4 0 0
4 5 0 0
5 6 0 0
6 7 1 0
7 8 0 0
8 9 2 9
9 10 0 0
10 11 0 0
11 12 1 0
12 13 0 0
13 14 0 0
14 15 0 0
15 16 1 0
16 17 0 0
17 18 1 0
18 19 0 0
19 20 2 11
20 21 0 0
21 22 0 0
22 23 0 0