pandas groupby 性能/组合 2 个函数

pandas groupby performance / combine 2 functions

我正在学习 python 并试图了解数据查询的最佳实践。 这是一些要测试的虚拟数据(客户销售

import pandas as pd
 
df = pd.DataFrame({'Name':['tom', 'bob', 'bob', 'jack', 'jack', 'jack'],'Amount':[3, 2, 5, 1, 10, 100], 'Date':["01.02.2022", "02.02.2022", "03.02.2022", "01.02.2022", "03.02.2022", "05.02.2022"]}) 
df.Date = pd.to_datetime(df.Date, format='%d.%m.%Y')

我想调查 2 种查询:

  1. 一个人是我们的客户多久了?
  2. 第一次之间的时间间隔是多少 和上次购买。

如何在不手动编写循环的情况下 运行 第一个查询?

到目前为止我为第二部分所做的是这个

result = df.groupby("Name").max() - df.groupby("Name").min()

是否可以将这两个 groupby 查询合并为一个以提高性能?

P.S。我正在尝试了解 pandas 以及如何优化查询的关键概念。非常感谢不同的方法和解释。

您可以使用 GroupBy.agg 和自定义函数来获取最大和最小日期之间的差异。

df.groupby('Name')['Date'].agg(lambda x: x.max()-x.min())

因为您已经有了 datetime 类型,这将很好地产生一个 Timedelta 对象,默认情况下它显示为 'x days'.

形式的字符串

您还可以将 GroupBy 对象保存在变量中并重新使用它。这样,组的计算只发生一次:

g = df.groupby("Name")['Date']
g.max() - g.min()

输出:

Name
bob    1 days
jack   4 days
tom    0 days
Name: Date, dtype: timedelta64[ns]