我不清楚你所说的组名是什么意思。你的意思是你分组的列中的值吗?
Apply 将通过 groupby 列将数据框分成多个较小的数据框。您分组的列仍在较小的数据框中。这就是你所追求的吗?
举例说明:
示例数据:
np.random.seed(1)
n=10
df = pd.DataFrame({'mygroups' : np.random.choice(['dogs','cats','cows','chickens'], size=n),
'mygroups2' : np.random.choice(['dogs','cats','cows','chickens'], size=n),
'data' : np.random.randint(1000, size=n)})
print df.head()
data mygroups mygroups2
0 254 cats dogs
1 357 chickens cats
2 914 dogs dogs
3 468 dogs chickens
4 907 chickens cats
让我们将它分组并组成一个愚蠢的功能:
gb = df.groupby(['mygroups','mygroups2'])
def someFunction(ingroup):
print ingroup
return ""
gb.apply(someFunction)
data mygroups mygroups2
7 668 cats cats
data mygroups mygroups2
7 668 cats cats
data mygroups mygroups2
0 254 cats dogs
5 252 cats dogs
data mygroups mygroups2
1 357 chickens cats
4 907 chickens cats
data mygroups mygroups2
6 490 chickens cows
8 925 chickens cows
data mygroups mygroups2
3 468 dogs chickens
data mygroups mygroups2
2 914 dogs dogs
9 398 dogs dogs
Out[718]:
mygroups mygroups2
cats cats
dogs
chickens cats
cows
dogs chickens
dogs
dtype: object
因此您可以在生成的打印输出中看到,每次迭代apply
都会获取输入数据帧的所有列。
编辑:
我不确定如何从 an 中获取一组键,apply
但我可以从循环中获取:
for eachgroup in gb:
print 'this group key = ' + str( eachgroup[0] )
print 'this group values = '
print eachgroup[1]