16
나는 이름과 순위에 의해 그룹화에 관심이 아마도 집계 값가져 오기 그룹 ID 다시 팬더 dataframe에 dataframe를 들어
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
하지만에서 필드를 좀하고 싶습니다납니다
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
등의 해당 행에 대한 그룹 번호가 들어있는 원래 df
는 THER인가 팬더에서 이렇게 좋은 방법?
나는, 파이썬과
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
그것을 얻을 수 있지만 큰 dataframe에 꽤 느린, 그래서 나는이 작업을 수행 할 수있는 더 좋은 내장 팬더의 방법이 될 수있다 생각.
또 다른 별칭은'grouped.grouper.labels [0] ' – beardc
인 것 같습니다. 그루퍼는 문서화되지 않았으므로 깨지지 않을 것입니다. – dashesy
3 년 후이 문제는 여전히 문서화되지 않았습니다. 그러나'df.grouper'는'BaseGrouper' 클래스를 가지고 있다는 것을 쉽게 알 수 있습니다. 'group_info' 메쏘드는 코드에서 [here] (https://github.com/pydata/pandas/blob/2e4da9b07d500add644257b9fa317a668cf5e332/pandas/core/groupby.py#L1549)로 정의되어 있으며, 약간의 흔적을 따라갈 수 있습니다 1)'group_info [1]'은 유일한 그룹 식별자의 배열이고, 2) 행'i'에 대한 그룹 식별자는'group_info [0] [i]'이고, 3)'group_info [3] ]'그룹의 수입니다. – shadowtalker