2
그룹 번호가있는 배열을 만드는 효율적인 팬 패널 방식을 찾고 있습니다 (원래 데이터 프레임의 모든 행에 대해이 행이 어느 그룹에 속해 있는지 알려주는 숫자가 필요함).) :팬더 : 그룹 인덱스를 사용하여 배열 만들기
In : df
Out]:
a b
0 1 1
1 1 2
2 1 1
3 2 1
4 2 2
5 2 1
In : groups.indices
Out:
{(1, 1): array([0, 2]),
(1, 2): array([1]),
(2, 1): array([3, 5]),
(2, 2): array([4])}
In : group_indices
Out: array([0, 1, 0, 2, 3, 2])
내 문제가 df
주위 20000x100 (64 비트 수레이다)과 열 두 가지로 I 그룹의 경우, 내가 6기가바이트 위의 메모리 사용량을 얻을 수 있다는 것입니다
df = pandas.DataFrame({'a': [1, 1, 1, 2, 2, 2], 'b': [1, 2, 1, 1, 2, 1]})
groups = df.groupby(['a', 'b'])
group_names = sorted(groups.groups.keys())
group_indices = np.array(df.index)
for index, group in enumerate(group_names):
group_indices[groups.indices[group]] = index
. 어느 쪽이 더 기대되는 것보다 길이다.
에 계산 된 GROUPBY 객체에 포함, 그것은 분명하지만 깨끗하고 있습니다 나는 그룹 객체에 대한 문서를 찾는 데 어려움을 겪고 있기 때문에 더 마술 적이라고 생각합니다. 'groups.grouper.result_index.tolist()'를 사용하여 올바른 레이블을 찾을 수도 있습니다. 감사! –
당신은 왜 정보를 가지고 있는지 설명하지 않았는데, groupby가 그 작업에서 부기를 관리하기 때문에 일반적으로 정보가 필요하지 않습니다. 너 뭐하려고? – Jeff
'grouper'에 대해 언급 해 주셔서 감사합니다. 문서화되지 않았기 때문에! 마지막으로 grouped.grouper.indices를 사용하여 그룹화 된 객체를 반복하면서 원래 데이터 프레임의 행을 변경하는 솔루션을 발견했습니다. 데이터 프레임에 중복 DateTime 인덱스가 있기 때문에 그것을 사용해야했습니다. 또한 변환은 너무 복잡하여 '적용'패러다임에 맞지 않습니다. 클러스터링과 각 그룹을 거치면서 동시에 여러 데이터 프레임을 채우는 작업이 포함됩니다. – dashesy