gpt4 book ai didi

python - 如何写好长的 Pandas 聚合?

转载 作者:行者123 更新时间:2023-11-28 21:51:42 26 4
gpt4 key购买 nike

长话短说

如何编写涉及groupby()unstack()apply() 等许多操作的长聚合?

示例

假设您有一个 DataFrame()n_sales = 1000 门票销售 n_events = 10 不同的事件,例如

import pandas as pd
import numpy as np

sales = pd.DataFrame({
'Event': np.random.choice(range(n_events), n_sales),
'Time': np.random.rand(n_sales)})

并且您想绘制当晚至少售出 n = [50, 100] 门票的事件数量: # of events over time where at least x/y tickets were sold

那我会做

accumulation_of_sales = sales.groupby(['Time', 'Event']).size().unstack().fillna(0).cumsum()
events_with_n_sales = accumulation_of_sales.apply(lambda x: x.value_counts(), axis=1).fillna(0)
events_with_geq_n_sales = events_with_n_sales[events_with_n_sales.columns[::-1]].cumsum(axis=1)

events_with_geq_n_sales[n].plot()

这对我来说似乎很难读懂,而且这些行原则上太长了(参见 PEP )。所以,

  • 如何最好地完成这些特定和类似的操作?
  • 是否有一些针对初学者的教程/风格指南/...?也许不是特别适合 Pandas,而是类似的语言?

最佳答案

编写多行 pandas 查询的一种方法是使用:

accumulation_of_sales = sales.groupby(['Time', 'Event'])\
.size()\
.unstack()\
.fillna(0)\
.cumsum()

我有时更喜欢将它们括在括号中。

但是,如果您经常在这里做几件事,则有一种更简单的方法。例如,每当您看到“groupby + unstack”时,您应该想到“pivot_table”:

sales.pivot_table(columns='Event', index='Time', aggfunc=len, fill_value=0).cumsum()

(等效,效率更高,可读性更好。)

关于python - 如何写好长的 Pandas 聚合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29700700/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com