ben Adı ve Rank tarafından gruplama ile ilgilenen ve muhtemelen toplam değerleralın grubu kimliği geri pandalar dataframe içine dataframe için
In [3]: group = df.groupby(['Name', 'Rank'])
In [4]: agg = group.agg(sum)
In [5]: agg
Out[5]:
Val
Name Rank
bar 0 1.839091
2 0.381515
foo 0 0.817097
1 0.209324
Ama bir alan olsun istiyoruz alma olduğum
In [2]: df = pd.DataFrame({'Name': ['foo', 'bar'] * 3,
...: 'Rank': np.random.randint(0,3,6),
...: 'Val': np.random.rand(6)})
...: df
Out[2]:
Name Rank Val
0 foo 0 0.299397
1 bar 0 0.909228
2 foo 0 0.517700
3 bar 0 0.929863
4 foo 1 0.209324
5 bar 2 0.381515
In [13]: df['Group_id'] = [2, 0, 2, 0, 3, 1]
In [14]: df
Out[14]:
Name Rank Val Group_id
0 foo 0 0.299397 2
1 bar 0 0.909228 0
2 foo 0 0.517700 2
3 bar 0 0.929863 0
4 foo 1 0.209324 3
5 bar 2 0.381515 1
gibi o satırın grup numarasını içeren orijinal df
ther mi e pandalarda bunu yapmak için iyi bir yol?
Ben, piton ile
In [16]: from itertools import count
In [17]: c = count()
In [22]: group.transform(lambda x: c.next())
Out[22]:
Val
0 2
1 0
2 2
3 0
4 3
5 1
alabilirsiniz ama büyük dataframe oldukça yavaş, bu yüzden bunu yapmak için daha iyi bir inşa pandalar içinde yol olabilir düşündüm.
Başka bir takma 'grouped.grouper.labels [0]' – beardc
gibi görünüyor, yalnızca sorun gruplayıcı belgelenmemiş, hiçbir garanti kırılmayacak. – dashesy
Üç yıl sonra ve bu şey hala belgelenmemiş. Ancak 'df.grouper' 'BaseGrouper' sınıfının olduğunu anlamak kolaydır. 'Group_info' yöntemi, kodda [burada] (https://github.com/pydata/pandas/blob/2e4da9b07d500add644257b9fa317a668cf5e332/pandas/core/groupby.py#L1549) tanımlanmıştır ve izi biraz geri takip edebilirsiniz. aşağıdakileri doğrulamak için: 1) 'group_info [1]', benzersiz grup tanımlayıcılarının bir dizisidir, 2) 'i' satır grubu tanımlayıcısı' group_info [0] [i] 've 3)' group_info [3 ] ' – shadowtalker