计算自Pandas DataFrame中条件为et以来的累计行数

时间:2015-05-17 22:54:22

标签: python pandas

我有一个pandas DF,它有两列,Day和Data,从csv文件中读取。

enter image description here

阅读之后,我添加了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)。有没有熊猫功能呢?

1 个答案:

答案 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