相关疑难解决方法(0)

pandas agg和apply函数有什么区别?

我无法弄清楚Pandas .aggregate.apply功能之间的区别.
以下面的例子为例:我加载一个数据集,做一个groupby,定义一个简单的函数,以及用户.agg.apply.

正如您所看到的,使用.agg和后,我的函数中的打印语句会产生相同的输出.apply.结果,另一方面是不同的.这是为什么?

import pandas
import pandas as pd
iris = pd.read_csv('iris.csv')
by_species = iris.groupby('Species')
def f(x):
    ...:     print type(x)
    ...:     print x.head(3)
    ...:     return 1
Run Code Online (Sandbox Code Playgroud)

使用apply:

by_species.apply(f)
#<class 'pandas.core.frame.DataFrame'>
#   Sepal.Length  Sepal.Width  Petal.Length  Petal.Width Species
#0           5.1          3.5           1.4          0.2  setosa
#1           4.9          3.0           1.4          0.2  setosa
#2           4.7          3.2           1.3          0.2  setosa
#<class 'pandas.core.frame.DataFrame'>
#   Sepal.Length  Sepal.Width  Petal.Length  Petal.Width Species
#0           5.1 …
Run Code Online (Sandbox Code Playgroud)

python pandas pandas-groupby

28
推荐指数
2
解决办法
2万
查看次数

pandas groupby与sum()在大型csv文件上?

我有一个大文件(19GB左右),我想在内存中加载以执行某些列的聚合.

该文件如下所示:

id, col1, col2, col3, 
1 ,  12 , 15 , 13 
2 ,  18 , 15 , 13 
3 ,  14 , 15 , 13 
3 ,  14 , 185 , 213 
Run Code Online (Sandbox Code Playgroud)

请注意,我在加载到数据框后使用列(id,col1)进行聚合,还要注意这些键​​可能会连续重复几次,例如:

3 ,  14 , 15 , 13 
3 ,  14 , 185 , 213 
Run Code Online (Sandbox Code Playgroud)

对于小文件,以下脚本可以完成此任务

import pandas as pd
data = pd.read_csv("data_file", delimiter=",")
data = data.reset_index(drop=True).groupby(["id","col1"], as_index=False).sum()
Run Code Online (Sandbox Code Playgroud)

但是,对于大文件,我需要在读取csv文件时使用chunksize来限制加载到内存中的行数:

import pandas as pd
data = pd.read_csv("data_file", delimiter=",", chunksize=1000000)
data = data.reset_index(drop=True).groupby(["id","col1"], as_index=False).sum()
Run Code Online (Sandbox Code Playgroud)

在后一种情况下,如果(id,col1)相似的行被分成不同的文件,则会出现问题.我该怎么处理?

编辑

正如@EdChum所指出的,有一个潜在的解决方法,即不仅将groupby结果附加到新的csv并重新读取并再次执行聚合,直到df大小不变. …

python pandas

9
推荐指数
2
解决办法
3118
查看次数

熊猫:df.groupby()对于大数据集来说太慢了。有替代方法吗?

df = df.groupby(df.index).sum()

我有一个包含380万行(单列)的数据框,并且我试图按索引对它们进行分组。但是,它需要永远完成计算。是否有其他方法可以处理非常大的数据集?提前致谢!!!!

我正在用Python编写。

数据如下所示。索引是客户ID。我想组qty_liter通过Index

df = df.groupby(df.index).sum()

但是这一行代码花了太多时间.....

在此处输入图片说明

有关此df的信息如下:

df.info()

<class 'pandas.core.frame.DataFrame'> Index: 3842595 entries, -2147153165 to \N Data columns (total 1 columns): qty_liter object dtypes: object(1) memory usage: 58.6+ MB

python grouping bigdata pandas

5
推荐指数
1
解决办法
1651
查看次数

pandas apply()和aggregate()函数之间的区别

如果我只是传递一个函数,那么DataFrame.aggregate()和DataFrame.apply()函数之间的返回值的(类型)有什么不同吗?

func=lambda x: x**2
Run Code Online (Sandbox Code Playgroud)

因为返回值似乎非常相似.文档只告诉:

apply() - > applied:Series或DataFrame

aggregate() - > aggregated:DataFrame

python pandas

3
推荐指数
1
解决办法
2085
查看次数

避免大熊猫DataFrame上GroupBy的内存问题

更新:

pandas df是这样创建的:

df = pd.read_sql(query, engine)
encoded = pd.get_dummies(df, columns=['account'])
Run Code Online (Sandbox Code Playgroud)

从此df创建一个dask df如下所示:

df = dd.from_pandas(encoded, 50)
Run Code Online (Sandbox Code Playgroud)

轻而易举地执行操作不会导致可见的进度(使用轻便的诊断程序进行检查):

result = df.groupby('journal_entry').max().reset_index().compute()
Run Code Online (Sandbox Code Playgroud)

原版的:

我有一个具有270万行和4,000列的大熊猫df。除四列外,所有列均为dtype uint8。uint8列仅保留值1或0。我试图在df上执行此操作:

result = df.groupby('id').max().reset_index()
Run Code Online (Sandbox Code Playgroud)

可以预期,此操作将立即返回内存错误。我最初的想法是在水平和垂直方向上对df进行分块。但是,这会造成混乱,因为.max()需要跨所有uint8列(而不仅仅是一对列)执行该操作。此外,像这样对df进行分块仍然非常慢。我的机器上有32 GB的RAM。

哪种策略可以减轻内存问题?

python memory dataframe pandas dask

3
推荐指数
2
解决办法
3041
查看次数

标签 统计

pandas ×5

python ×5

bigdata ×1

dask ×1

dataframe ×1

grouping ×1

memory ×1

pandas-groupby ×1