2017-05-15 118 views
0

我有一种情况,我想添加一个新列,这个列依赖于通过基于当前行过滤DataFrame获得的值。例如:熊猫通过基于当前行的值过滤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上的变体,并且转换为无效,我认为这是因为转换只需要一个Series而不是DataFrame。

回答

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 
+0

感谢。如果数据没有按日期排序,我们可以只做'df.sort_values('date')'。 跟进:如果我只想查看过去一周的用户,我该如何修改? (我知道,我给出的具体例子是提供日期的一个坏例子)。 – lhay86

+0

这个解决方案提供的预期输出和输出不同吗? – Satyadev

+0

@Satyadev同意,但我认为所需的输出不一致,也许OP可以确认... – IanS