Python 使用pandas键获取组名称的最快方法是什么?

Python 使用pandas键获取组名称的最快方法是什么?,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我尽可能多地到处看看 如果我在pandas中使用了groupby,并且我有一个组,称它为group1,我如何获得group1的名称 我使用的是groupby和apply,因此我没有明确地拉组,这就是我需要这样做的原因 假设df组由两个事物组成 df.groupby(['key1','key2']) 然后我得到了一个使用这个的组: 我想避免这样做: group1.key1.unique()[0] group1.key2.unique()[0] 因为速度太慢,所以无法获取名称。我不清楚您所说的组

我尽可能多地到处看看

如果我在pandas中使用了
groupby
,并且我有一个组,称它为
group1
,我如何获得group1的名称

我使用的是
groupby
apply
,因此我没有明确地拉组,这就是我需要这样做的原因

假设df组由两个事物组成

df.groupby(['key1','key2'])
然后我得到了一个使用这个的组:

我想避免这样做:

group1.key1.unique()[0]
group1.key2.unique()[0]

因为速度太慢,所以无法获取名称。

我不清楚您所说的组名是什么意思。您是指您分组所依据的列中的值吗

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] 

我指的是特定组的键名。如果你使用groups.keys,你就会得到我所谓的“组名”,那么你是在问如何编写一个函数,当你将它应用于分组数据时,可以看到键吗?我的意思是,我想象这样一个函数存在。看看这个。这会得到一个特定的组,称之为group1。一旦我有了组,我怎么才能得到名称呢?请参见“修改”而不是“唯一”,您可以只得到每个键的第一个值,因为它们保证是唯一的。应该更快。我同意,似乎应该有一种方法来进入并抓住它。使用.iloc?这是最快的吗?是的,相当快。