Python Pandas 日期 groupby 计数计算阈值的第一个实例

标签 python pandas group-by conditional-statements

拥有过去 10 年所有客户的交易数据,我有一个数据框 df:

   Customer_ID | date             | year             | Dollars 
    ABC           2017-02-07         2017               456
    ABC           2017-03-05         2017               167
    ABC           2017-07-13         2017               345        
    ABC           2017-05-15         2017               406
    ABC           2016-12-13         2016               320
    ABC           2016-01-03         2016               305
    ABC           2016-10-10         2016               456
    ABC           2016-05-10         2016               175        
    ABC           2015-04-07         2015               145
    BCD           2017-09-08         2017               155
    BCD           2016-10-22         2016               274
    BCD           2016-10-19         2016               255

当客户在一年内第一次第四次访问时,我想添加一个标记。

所以这将是输出:

   Customer_ID | date             | year             | Dollars  | Flag
    ABC           2017-02-07         2017               456
    ABC           2017-03-05         2017               167
    ABC           2017-07-13         2017               345        
    ABC           2017-05-15         2017               406
    ABC           2016-12-13         2016               320         X
    ABC           2016-01-03         2016               305
    ABC           2016-10-10         2016               456         
    ABC           2016-05-10         2016               175        
    ABC           2015-04-07         2015               145
    BCD           2017-09-08         2017               155
    BCD           2016-10-22         2016               274
    BCD           2016-10-19         2016               255

我本来打算这样做,但它没有生成所需的输出,而且我不知道如何标记他们第一次第四次访问。

   df ['Flag'] = np.where(df[['Customer_ID']].groupby(['year']).agg(['count'])>3, 'X','0')

最佳答案

然后,你可以试试这个,我正在使用 cumcount(Ps:你可以通过 df.drop(['Count','Count2'],axis=1 删除列)):

df['Count']=df.sort_values('date').groupby(['Customer_ID','year']).cumcount()
df['Count2']=df.sort_values('date').groupby(['Customer_ID','Count']).cumcount()
df['Flag']=np.where(((df['Count']==3) & (df['Count2']==0)),'X', ' ')


   Customer_ID       date  year  Dollars  Count  Count2 Flag
0          ABC 2017-02-07  2017      456      0       2     
1          ABC 2017-03-05  2017      167      1       1     
2          ABC 2017-07-13  2017      345      3       1     
3          ABC 2017-05-15  2017      406      2       1     
4          ABC 2016-12-13  2016      320      3       0    X
5          ABC 2016-01-03  2016      305      0       1     
6          ABC 2016-10-10  2016      456      2       0     
7          ABC 2016-05-10  2016      175      1       0     
8          ABC 2015-04-07  2015      145      0       0     
9          BCD 2017-09-08  2017      155      0       1     
10         BCD 2016-10-22  2016      274      1       0     
11         BCD 2016-10-19  2016      255      0       0     

关于Python Pandas 日期 groupby 计数计算阈值的第一个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45175302/

相关文章:

python - 无论用户是谁,桌面上的 to_excel

php - 按名称分组,但保留与名称关联的所有标签

sql - MySQL - 限制分组依据

mysql - 如何使用 Group by 子句更新具有特定计数的多行?

python - 在Python中执行和监控外部程序的多个实例

python - 无法导入 : "from trello import TrelloClient" py-trello and trello packages (replit)

python - 是否可以使用 str.extract 提取 pandas 中的所有行?

python - 带有 stub 列表的 Pandas Wide_to_long

python - "WindowsError: [Error 206] The filename or extension is too long"使用子进程多次运行程序后

python - 如何根据特定列中的出现次数从不包括行的 Dataframe 创建新的 DataFrame?