2

見つけられる限り調べてみました。

パンダで使用groupbyし、グループを持っている場合、それを と呼びgroup1ます。group1 の名前を取得するにはどうすればよいですか?

私は and を使用groupbyしてapplyいるため、グループを明示的にプルしていません。そのため、これを行う必要があります。

群 df を 2 つのものと仮定します。

df.groupby(['key1','key2'])

次に、これを使用してグループを取得します

私は次のことを避けたい:

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

遅いので名前を取得する..

4

1 に答える 1

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] 
于 2014-11-18T21:23:07.937 に答える