Pandas表示匹配条件后的行

时间:2017-03-08 19:42:03

标签: python pandas dataframe mean

假设我有一个看起来像这样的Pandas数据框:

import pandas as pd
import numpy as np

df = pd.DataFrame({"time": [100,200,300,400,100,200,300,np.nan],
                   "correct": [1,1,0,1,1,0,0,0]})

印刷:

   correct   time
0        1  100.0
1        1  200.0
2        0  300.0
3        1  400.0
4        1  100.0
5        0  200.0
6        0  300.0
7        0    NaN

我想仅计算<{1}}等于time行的correct的平均值。因此,在上面的数据框架中,我想计算0400300的平均值(这将给出NaN

我需要小心处理350值,以及最后一行有NaN但后面没有一行的文字边缘情况

什么是最有效的方式在Pandas中执行此操作而不必诉诸循环数据框(我当前的实现)?

1 个答案:

答案 0 :(得分:5)

您可以使用shift()方法:

In [55]: df.loc[df.correct.shift() == 0, 'time'].mean()
Out[55]: 350.0

说明:

In [53]: df.correct.shift()
Out[53]:
0    NaN
1    1.0
2    1.0
3    0.0
4    1.0
5    1.0
6    0.0
7    0.0
Name: correct, dtype: float64

In [54]: df.loc[df.correct.shift() == 0, 'time']
Out[54]:
3    400.0
6    300.0
7      NaN
Name: time, dtype: float64