如何在熊猫中使用groupby获得datediff?

xiaoluohao

我有一个日期框架“ df”,用于存储用户的订单:

    user_id order_date
0         a 2018-01-17
1         a 2018-04-29
2         a 2018-05-19
3         a 2018-05-21
4         a 2018-06-15
5         b 2018-09-18
6         b 2019-01-30
7         b 2019-02-01
8         b 2019-07-03
9         c 2019-07-31
10        c 2019-12-10
11        c 2019-12-12
12        c 2019-12-24

'order_date'已被订购。我想知道不同订单的不同用户的日期差异。我需要使用“ groupby”来分隔用户,然后计算datediff。结果应为:

    user_id   datediff
0         a         NA
1         a        102
2         a         20
3         a          2
4         a         25
5         b         NA
6         b        134
7         b          2
8         b        152
9         c         NA
10        c        132
11        c          2
12        c         12

我知道如何通过使用幼稚的循环。如何以更好的方式(如平移或滚动)获得它?顺便说一句,您不必获得完全相同的结果。“ NA”可以是“ NAT”。“ 102”可能是“ 102天”。

此外,如何获取不同用户的datediff方法?结果应为:

    user_id   mean_datediff
0         a           37.25
1         b           68.00   
2         c           48.67

对于用户a,平均值为(102 + 20 + 2 + 25)/4=37.25,而不是149/5。

最后一步是将“ mean_datediff”添加到原始df中。预期输出为:

    user_id order_date mean_datediff
0         a 2018-01-17         37.25
1         a 2018-04-29         37.25
2         a 2018-05-19         37.25
3         a 2018-05-21         37.25
4         a 2018-06-15         37.25
5         b 2018-09-18         68.00
6         b 2019-01-30         68.00
7         b 2019-02-01         68.00
8         b 2019-07-03         68.00
9         c 2019-07-31         48.67
10        c 2019-12-10         48.67
11        c 2019-12-12         48.67
12        c 2019-12-24         48.67
耶斯列尔

使用DataFrameGroupBy.diff的差异,Series.dt.days对转换timedeltas到天:

df['order_date'] = pd.to_datetime(df['order_date'])

df['datediff'] = df.groupby(['user_id'])['order_date'].diff().dt.days
print (df)
   user_id order_date  datediff
0        a 2018-01-17       NaN
1        a 2018-04-29     102.0
2        a 2018-05-19      20.0
3        a 2018-05-21       2.0
4        a 2018-06-15      25.0
5        b 2018-09-18       NaN
6        b 2019-01-30     134.0
7        b 2019-02-01       2.0
8        b 2019-07-03     152.0
9        c 2019-07-31       NaN
10       c 2019-12-10     132.0
11       c 2019-12-12       2.0
12       c 2019-12-24      12.0

并在必要时添加的整数Series.astypeInt64工作大熊猫0.24+

df['order_date'] = pd.to_datetime(df['order_date'])

df['datediff'] = df.groupby(['user_id'])['order_date'].diff().dt.days.astype('Int64')
print (df)
   user_id order_date  datediff
0        a 2018-01-17       NaN
1        a 2018-04-29       102
2        a 2018-05-19        20
3        a 2018-05-21         2
4        a 2018-06-15        25
5        b 2018-09-18       NaN
6        b 2019-01-30       134
7        b 2019-02-01         2
8        b 2019-07-03       152
9        c 2019-07-31       NaN
10       c 2019-12-10       132
11       c 2019-12-12         2
12       c 2019-12-24        12

编辑:

对于由means填充的新列,请使用GroupBy.transformlambda函数:

df['mean_datediff'] = (df.groupby(['user_id'])['order_date']
                         .transform(lambda x: x.diff().dt.days.mean()))
print (df)
   user_id order_date  mean_datediff
0        a 2018-01-17      37.250000
1        a 2018-04-29      37.250000
2        a 2018-05-19      37.250000
3        a 2018-05-21      37.250000
4        a 2018-06-15      37.250000
5        b 2018-09-18      96.000000
6        b 2019-01-30      96.000000
7        b 2019-02-01      96.000000
8        b 2019-07-03      96.000000
9        c 2019-07-31      48.666667
10       c 2019-12-10      48.666667
11       c 2019-12-12      48.666667
12       c 2019-12-24      48.666667

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Pyspark的熊猫中使用iloc获得相同的结果?

来自分类Dev

如何在条件中使用熊猫groupby.count()

来自分类Dev

如何在熊猫中使用groupby创建索引列

来自分类Dev

如何在熊猫中使用groupby创建新列?

来自分类Dev

如何在条件中使用熊猫groupby.count()

来自分类Dev

在熊猫groupby datediff

来自分类Dev

如何在querydsl中使用SQLExpression.datediff()返回的NumberExpression

来自分类Dev

如何在MySQL中使用datediff函数过滤行?

来自分类Dev

如何在熊猫查询中使用变量?

来自分类Dev

如何在jdbctemplate中使用groupBy查询

来自分类Dev

如何在Linq SQL中使用Groupby

来自分类Dev

如何在SQL中使用groupby,distinct

来自分类Dev

在大熊猫中使用groupby以获得比例的更有效方法

来自分类Dev

熊猫:groupby之后如何获得特定的分组?

来自分类Dev

如何在熊猫中的groupby上使用argmin

来自分类Dev

如何在Outlook宏中使用Datediff来计算到月底为止的天数?

来自分类Dev

在熊猫中使用groupby获取行数

来自分类Dev

在熊猫中使用groupby过滤数据

来自分类Dev

在熊猫中使用groupby获取行数

来自分类Dev

在熊猫中使用groupby过滤数据

来自分类Dev

如何在熊猫数据框中使用索引?

来自分类Dev

如何在单元测试中使用熊猫数据框

来自分类Dev

如何在熊猫数据框中使用列表作为值?

来自分类Dev

如何在熊猫df.query()中使用循环变量

来自分类Dev

我如何在熊猫滚动中使用apply_corr()

来自分类Dev

如何在熊猫中使用多个列映射功能?

来自分类Dev

如何在熊猫中使用多索引迭代系列

来自分类Dev

如何在Python中使用熊猫跳过读取空文件

来自分类Dev

熊猫)如何在sort_values中使用kind选项

Related 相关文章

热门标签

归档