【问题标题】:apply calculation in pandas column with groupby使用 groupby 在 pandas 列中应用计算
【发布时间】:2020-07-02 21:10:12
【问题描述】:

下面的代码有什么问题?? a)我需要按区域列分组并跨列应用一些数学公式: b)另外,如果我有另一列,让我们说日期并需要添加到 groupby 它将如何出现在下面的命令中

df3 = dataset.groupby('AREA')(['col1']+['col2']).sum()

表格如下图

enter image description here

【问题讨论】:

  • 请向我们展示原始(原始)数据帧,以及您希望从 groupby 函数中得到的数据帧结果,谢谢
  • 最好避免使用图像并将原始数据粘贴为文本。谢谢!

标签: pandas pandas-groupby


【解决方案1】:

我认为您可以在分组之前对列求和以获得更好的性能:

dataset['new'] = dataset['col1']+dataset['col2']
df3 = dataset.groupby('AREA', as_index=False)['new'].sum()

但是您的解决方案可以在 lambda 函数中使用:

df3 = (dataset.groupby('AREA')
              .apply(lambda x: (x['col1']+x['col2']).sum())
              .reset_index(name='SUM'))

性能

np.random.seed(123)
N = 100000

dataset = pd.DataFrame({'AREA': np.random.randint(1000, size=N),
                        'col1': np.random.randint(10, size=N),
                        'col2':np.random.randint(10, size=N)})
#print (dataset)

In [24]: %%timeit
    ...: dataset['new'] = dataset['col1']+dataset['col2']
    ...: df3 = dataset.groupby('AREA', as_index=False)['new'].sum()
    ...: 
7.64 ms ± 50.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [25]: %%timeit
    ...: df3 = (dataset.groupby('AREA')
    ...:               .apply(lambda x: (x['col1']+x['col2']).sum())
    ...:               .reset_index(name='SUM'))
    ...:               
368 ms ± 5.82 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

【讨论】:

  • 如果我想在 df3 中也将 'area' 作为列,那么 index falsing 究竟是做什么的?
  • @user12853430 - 答案已编辑,之前错误地删除了 AREA 列。
猜你喜欢
  • 1970-01-01
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 2017-05-15
相关资源
最近更新 更多