pandas中的groupby是创建一个数据的副本还是只是一个视图?[英] Does groupby in pandas create a copy of the data or just a view?

本文是小编为大家收集整理的关于pandas中的groupby是创建一个数据的副本还是只是一个视图?的处理方法,想解了pandas中的groupby是创建一个数据的副本还是只是一个视图?的问题怎么解决?pandas中的groupby是创建一个数据的副本还是只是一个视图?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

pandas.DataFrame.groupby 是创建数据的副本还是只是创建一个视图?在(更可能的)不创建副本的情况下,额外的内存开销是多少?它如何与原始数据帧的特性(例如行数、列数、不同组的数量)一起扩展?

推荐答案

pandas 中的 groupby 代码 有点复杂,因此很难从第一原理中找出.快速测试使内存使用量似乎随着数据的增长而增长,并且更多的组 = 更多的内存,但它似乎并没有制作完整的副本或任何东西:

In [7]: df = pd.DataFrame(np.random.random((1000,5)))

In [8]: def ret_df(df):
   ...:     return df

In [9]: def ret_gb_df(df):
   ...:     return df, df.groupby(0).mean()

In [10]: %memit ret_df(df)
peak memory: 75.91 MiB, increment: 0.00 MiB

In [11]: %memit ret_gb_df(df)
peak memory: 75.96 MiB, increment: 0.05 MiB

In [12]: df = pd.DataFrame(np.random.random((100000,5)))

In [13]: %memit ret_df(df)
peak memory: 79.76 MiB, increment: -0.02 MiB

In [14]: %memit ret_gb_df(df)
peak memory: 94.88 MiB, increment: 15.12 MiB

In [15]: df = pd.DataFrame(np.random.random((1000000,5)))

In [16]: %memit ret_df(df)
peak memory: 113.98 MiB, increment: 0.01 MiB

In [17]: %memit ret_gb_df(df)
peak memory: 263.14 MiB, increment: 149.16 MiB

In [18]: df = pd.DataFrame(np.random.choice([0,1,2,3], (1000000, 5)))

In [19]: %memit ret_df(df)
peak memory: 95.34 MiB, increment: 0.00 MiB

In [20]: %memit ret_gb_df(df)
peak memory: 166.91 MiB, increment: 71.56 MiB

本文地址:https://www.itbaoku.cn/post/1727880.html