Excel像pandas公式一样

我有一个这种格式的pandas数据DataFrame

 User_id|2014-01|2014-02|2014-03|2014-04|2014-05|...|2014-12 1 | 7 | NaN | NaN | NaN | NaN |...| NaN 2 | NaN | 5 | NaN | NaN | 9 |...| NaN 3 | 2 | 4 | NaN | NaN | NaN |...| NaN 

换句话说,列是几个月,索引是user_id ,每个单元格包含一个整数,或NaN

这些数字代表已采取的行动,如果在3个月之后,则认为行动是成功的,不需要采取其他行动。

我的目标是find成功的行动清单

在Excel中,我会写一个像这样的公式:

 Sheet2!E5=AND(Sheet1!E5<>"NaN",Sheet1!D5="NaN",Sheet1!C5="NaN",Sheet1!B5="NaN") 

然后将它拖到其余的列,然后我会有一个指标,行动是否成功。

怎样才能有效地完成大pandas?

示例输出:

对于上面给出的例子,期望的输出应该是:

 User_id|2014-01|2014-02|2014-03|2014-04|2014-05| 1 | T | F | F | F | F | 2 | F | F | F | F | ? | 3 | F | T | F | F | F | 

我不知道如何处理最右边的列(您只有'?'),但是可以从下面的代码开始相当容易地进行调整,或者只是使用占位符号或NaN填充数据:

 df2 = df.copy() for i in range(1,len(df.columns)): df2.iloc[:,i] = ((df.iloc[:,i].notnull()) & (df.iloc[:,i+1:i+4].apply(lambda x: all(x.isnull()),axis=1))) 

开始数据df

  User_id 2014-01 2014-02 2014-03 2014-04 2014-05 0 1 7 NaN NaN NaN NaN 1 2 NaN 5 NaN NaN 9 2 3 2 4 NaN NaN NaN 

结果df2

  User_id 2014-01 2014-02 2014-03 2014-04 2014-05 0 1 True False False False False 1 2 False False False False False 2 3 False True False False False 

对于上述填充,可以添加三个占位符列,然后稍微调整剩余的代码:

 df[['pad1','pad2','pad3']] = np.nan df2 = df.copy().iloc[:,:-3] for i in range(1,len(df2.columns)): df2.iloc[:,i] = ((df.iloc[:,i].notnull()) & (df.iloc[:,i+1:i+4].apply(lambda x: all(x.isnull()),axis=1))) 

现在你在最后一列有一个“真”

  User_id 2014-01 2014-02 2014-03 2014-04 2014-05 0 1 True False False False False 1 2 False False False False True 2 3 False True False False False