pandas通过基于当前行的值过滤DataFrame来添加列

时间:2017-05-15 09:00:19

标签: python pandas

我有一个案例,我想添加一个新列,该列依赖于我通过基于当前行过滤DataFrame获得的值。例如:

    date        happy   user
0   2017-05-01  True    user1
1   2017-05-02  True    user1
2   2017-05-03  False   user1
3   2017-05-04  True    user1
4   2017-05-01  False   user2
5   2017-05-02  True    user2

我想添加一个列previous_days_happy,该列可以为每个用户提供他们满意的当天之前的天数。所以这里的输出是:

    date        happy   user    prev_happy_days
0   2017-05-01  True    user1   0
1   2017-05-02  True    user1   1
2   2017-05-03  False   user1   2
3   2017-05-04  True    user1   2
4   2017-05-01  False   user2   0
5   2017-05-02  True    user2   0

我的研究只找到了根据当前行中的值添加列的示例。但是在这里我想获取当前行的值并使用它们来过滤DataFrame并计算一个值。

常规过滤,如:

df[df['userid'] < 1000]

没有帮助,因为要过滤的值不是常量,而是依赖于行。

我也试过了groupby的变种,变换无济于事,我认为这是因为变换只接受一个系列,而不是一个DataFrame。

1 个答案:

答案 0 :(得分:0)

假设每个组中的数据按日期排序:

df['prev_happy_days'] = df.groupby('user')['happy'].cumsum().astype(int)

将返回:

         date  happy   user  prev_happy_days
0  2017-05-01   True  user1                1
1  2017-05-02   True  user1                2
2  2017-05-03  False  user1                2
3  2017-05-04   True  user1                3
4  2017-05-01  False  user2                0
5  2017-05-02   True  user2                1