Python Pandas:使用Aggregate vs Apply定义新列

艾伦

假设我有一个像这样的数据框:

n = 20
dim1 = np.random.randint(1, 3, size=n)
dim2 = np.random.randint(3, 5, size=n)
data1 = np.random.randint(10, 20, size=n)
data2 = np.random.randint(1, 10, size=n)
df = pd.DataFrame({'a': dim1, 'b': dim2 ,'val1': data1, 'val2': data2})

如果我定义了一个按组返回的函数:

def h(x):
    if x['val2'].sum() == 0:
        return 0
    else:
        return (x['val1'].sum())*1.0/x['val2'].sum()*1.0

按列之一进行分组并汇总将返回结果:

df.groupby(['a']).aggregate(h)['val1']

尽管它将所有现有列转换为所需结果,而不是添加新列

使用聚合时,按两列分组会导致错误:

df.groupby(['a','b']).aggregate(h)['val1']

KeyError: 'val2'

但是,将聚合切换为apply似乎可行。

我有两个问题:

  1. 为什么要申请工作而不是总申请?
  2. 如果按一组键对数据框进行分组后,我想使用一个将组值聚合为新列的函数,那是最好的方法?

提前致谢。

安迪·海登(Andy Hayden)

要稍微退一步,执行此特定“聚合”的一种更快的方法是多次使用sum(在cython中进行了优化)

In [11]: %timeit g.apply(h)
1000 loops, best of 3: 1.79 ms per loop

In [12]: %timeit g['val1'].sum() / g['val2'].sum()
1000 loops, best of 3: 600 µs per loop

IMO分组代码很长毛,通常通过创建一个列表来查看正在发生的值,从而“偷偷摸摸地”窥视正在发生的事情:

def h1(x):
   a.append(x)
   return h(x)
a = []

警告:有时此列表中的数据类型不一致(在此情况下,pandas在进行任何计算之前会尝试一些不同的事情)...如本例所示!

第二个聚合卡在每个列上,因此该组(将引发错误)被卡住

0     10
4     16
8     13
9     17
17    17
19    11
Name: val1, dtype: int64

这是val1列的子系列,其中(a,b)=(1,3)。

这很可能是一个错误,在引发此问题之后它可能还会尝试其他方法(我怀疑这就是为什么firsts版本有效的原因,特别是这样)。

对于那些感兴趣的人,a我得到的是:

In [21]: a
Out[21]: 
[SNDArray([125755456, 131767536,        13,        17,        17,        11]),
 Series([], name: val1, dtype: int64),
 0     10
4     16
8     13
9     17
17    17
19    11
Name: val1, dtype: int64]

我不知道SNDArray是关于什么的...

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python Pandas:使用groupby.aggregate获取列的非空值计数

来自分类Dev

Python Pandas:使用groupby.aggregate获取列的非空值计数

来自分类Dev

使用apply()自定义函数创建新列时的Pandas内存错误

来自分类Dev

如何使用Pandas groupby和Aggregate生成新列?

来自分类Dev

使用rolling_apply对pandas的Python自定义函数

来自分类Dev

Pandas:定义新列的类型

来自分类Dev

使用Pandas df.apply创建新列

来自分类Dev

使用python词典中的值的新pandas dataframe列

来自分类Dev

创建新列时使用Python Pandas SettingWithCopyWarning

来自分类Dev

创建对象使用新的VS

来自分类Dev

Python Pandas:在Apply中使用行号

来自分类Dev

何时在Python中使用if vs elif

来自分类Dev

使用 python 默认字典 vs .get()

来自分类Dev

在Pandas DataFrame Python中添加新列

来自分类Dev

使用 DataFrame.apply 使用 Pandas 中的特定列创建一个新列

来自分类Dev

使用自定义委托vs NSNotification vs NSUserDefaults状态

来自分类Dev

使用自定义委托vs NSNotification vs NSUserDefaults状态

来自分类Dev

通过使用2个现有列和python和pandas的函数填充新列

来自分类Dev

Python Pandas:使用基于不同列中的分类值的计算创建新列

来自分类Dev

Pandas Dataframe问题:Apply函数用结果添加新列

来自分类Dev

Python错误处理:最终vs.新行

来自分类Dev

函数调用很长时,Python的VS Code输入新行

来自分类Dev

python pandas parse_dates np.array vs list

来自分类Dev

使用Python在CSV上添加新列

来自分类Dev

Python:pandas DataFrame基于其他列的新列

来自分类Dev

基于行和列条件pandas python的新列

来自分类Dev

使用apply函数在pandas中创建一个具有舍入值的新列

来自分类Dev

使用Python / pandas创建新列的已清除字符串数据

来自分类Dev

如何汇总此数据并使用python和pandas创建新列?

Related 相关文章

  1. 1

    Python Pandas:使用groupby.aggregate获取列的非空值计数

  2. 2

    Python Pandas:使用groupby.aggregate获取列的非空值计数

  3. 3

    使用apply()自定义函数创建新列时的Pandas内存错误

  4. 4

    如何使用Pandas groupby和Aggregate生成新列?

  5. 5

    使用rolling_apply对pandas的Python自定义函数

  6. 6

    Pandas:定义新列的类型

  7. 7

    使用Pandas df.apply创建新列

  8. 8

    使用python词典中的值的新pandas dataframe列

  9. 9

    创建新列时使用Python Pandas SettingWithCopyWarning

  10. 10

    创建对象使用新的VS

  11. 11

    Python Pandas:在Apply中使用行号

  12. 12

    何时在Python中使用if vs elif

  13. 13

    使用 python 默认字典 vs .get()

  14. 14

    在Pandas DataFrame Python中添加新列

  15. 15

    使用 DataFrame.apply 使用 Pandas 中的特定列创建一个新列

  16. 16

    使用自定义委托vs NSNotification vs NSUserDefaults状态

  17. 17

    使用自定义委托vs NSNotification vs NSUserDefaults状态

  18. 18

    通过使用2个现有列和python和pandas的函数填充新列

  19. 19

    Python Pandas:使用基于不同列中的分类值的计算创建新列

  20. 20

    Pandas Dataframe问题:Apply函数用结果添加新列

  21. 21

    Python错误处理:最终vs.新行

  22. 22

    函数调用很长时,Python的VS Code输入新行

  23. 23

    python pandas parse_dates np.array vs list

  24. 24

    使用Python在CSV上添加新列

  25. 25

    Python:pandas DataFrame基于其他列的新列

  26. 26

    基于行和列条件pandas python的新列

  27. 27

    使用apply函数在pandas中创建一个具有舍入值的新列

  28. 28

    使用Python / pandas创建新列的已清除字符串数据

  29. 29

    如何汇总此数据并使用python和pandas创建新列?

热门标签

归档