Python Pandas-将一个大数据帧转换成几个小数据帧,并通过一个函数运行每个数据帧

Python Pandas-将一个大数据帧转换成几个小数据帧,并通过一个函数运行每个数据帧,python,pandas,Python,Pandas,我有一个巨大的数据集,大约有60000个数据。我首先使用一些标准对整个数据集进行分组,接下来我要做的是将整个数据集分离为标准内的许多小数据集,并自动对每个小数据集运行一个函数,以获取每个小数据集的参数。我不知道怎么做。是否有任何代码使之成为可能? 这就是我所拥有的 Date name number 20100101 John 1 20100102 Kate 3 20100102 Kate 2 20100103 John

我有一个巨大的数据集,大约有60000个数据。我首先使用一些标准对整个数据集进行分组,接下来我要做的是将整个数据集分离为标准内的许多小数据集,并自动对每个小数据集运行一个函数,以获取每个小数据集的参数。我不知道怎么做。是否有任何代码使之成为可能? 这就是我所拥有的

Date         name    number
20100101    John      1
20100102    Kate      3
20100102    Kate      2
20100103    John      3
20100104    John      1
我想把它分成两个小的

Date         name    number
20100101    John      1
20100103    John      3
20100104    John      1

Date         name    number
20100102    Kate      3
20100102    Kate      2

除非您的功能非常慢,否则这可能通过切片来实现(例如,对于某些索引a和b,
df_small=df[a:b]
)。唯一的诀窍是选择a和b。我在下面的代码中使用了
range
,但您可以用其他方法:

param_list = []
n = 10000 #size of smaller dataframe

# loop up to 60000-n, n at a time
for i in range(0,60000-n,n):
    # take a slice of big dataframe and apply function to get 'param'
    df_small = df[i:i+n] #
    param = function( df_small )

    # keep our results in a list
    param_list.append(param)
编辑:根据更新,您可以执行以下操作:

# loop through names
for i in df.name.values.unique():
    # take a slice of big dataframe and apply function to get 'param'
    df_small = df[df.name==i] 

我认为比使用子集筛选原始数据集更有效的方法是
groupby()
,作为演示:

for _, g in df.groupby('name'):
    print(g)

#       Date  name  number
#0  20100101  John       1
#3  20100103  John       3
#4  20100104  John       1
#       Date  name  number
#1  20100102  Kate       3
#2  20100102  Kate       2
因此,要获得小数据帧列表,您可以执行
[g for g,g in df.groupby('name')]

为了扩展这个答案,我们可以更清楚地看到
df.groupby()
返回的内容如下:

for k, g in df.groupby('name'):
    print(k)
    print(g)

# John
#        Date  name  number
# 0  20100101  John       1
# 3  20100103  John       3
# 4  20100104  John       1
# Kate
#        Date  name  number
# 1  20100102  Kate       3
# 2  20100102  Kate       2

对于
groupby()
返回的每个元素,它都包含一个键和一个具有唯一键值的
名称的数据框。在上面的解决方案中,我们不需要密钥,所以我们可以指定一个位置持有者并放弃它。

为什么不能在数据帧的块之间循环?@benten循环只在一行到另一行之间工作?那么,我如何将数据帧分割成许多小的数据帧呢?对不起,我之前没有说清楚。我的df是一个与许多不同的人。我想把df分成几个小的df,每个df收集来自同一个人的df的所有数据。我编辑了这篇文章,以便更清楚地描述它。但还是有可能吗?感谢.docs从数据帧中选择行:[谢谢,我稍后会检查文档。但是当我尝试此操作时,它返回了我AttributeError:“Series”对象没有属性“value”。你知道为什么会发生这种情况吗?我猜是你使用了
value
而不是
value
。对吗?是的,你是对的,这是我的错。但是当我修复它时,它返回了我AttributeError:“numpy.nda”rray'对象没有属性'unique',仍然无法工作。当我尝试使用此属性时,它返回给我一个语法错误:无效语法。您知道为什么会发生这种情况吗?如果不知道您尝试了什么,特别是使用这样的一行,很难判断。因此我不确定这里的'uu'和'g'是什么。您能解释一下吗?谢谢。
df.groupby(‘名字’)
返回一个元组列表,其中第一个元素是键,在本例中,第一个元素是
John和Kate
,第二个元素是具有唯一键的数据帧
只是一个位置保持器,因为我们不需要键,
g
是小数据帧。您还可以指定为
k,g
,这是s除了
k
不在身体中使用之外,其他东西都是相同的。