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 种查询:
- 一个人是我们的客户多久了?
- 第一次之间的时间间隔是多少
和上次购买。
如何在不手动编写循环的情况下 运行 第一个查询?
到目前为止我为第二部分所做的是这个
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]
我正在学习 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 种查询:
- 一个人是我们的客户多久了?
- 第一次之间的时间间隔是多少 和上次购买。
如何在不手动编写循环的情况下 运行 第一个查询?
到目前为止我为第二部分所做的是这个
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]