我尽可能多地检查了一下。
如果我在pandas中使用groupby
,并且我有一个组,请将其命名为group1
,如何获取group1的名称?
我正在使用groupby
和apply
,所以我没有明确地提取这些组,这就是我需要这样做的原因。
假设组df由两件事组成。
df.groupby(['key1','key2'])
我想避免这样做:
group1.key1.unique()[0]
group1.key2.unique()[0]
获取名称,因为这很慢..
答案 0 :(得分:1)
我不清楚你的名字是什么意思。您的意思是您要分组的列中的值吗?
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
的每次迭代都获取输入数据帧的所有列。
编辑:
我不确定如何从apply
获取密钥元组,但我可以从循环中获取:
for eachgroup in gb:
print 'this group key = ' + str( eachgroup[0] )
print 'this group values = '
print eachgroup[1]