[PYTHON] 복제로 데이터 정규화
PYTHON복제로 데이터 정규화
참고 :이 질문은 실제로 분할 판다 데이터 프레임 문자열 항목을 별도의 행으로 복제 한 것입니다. 그러나 여기에 제공된 대답은 좀 더 일반적이고 유익합니다. 따라서 모든 점을 고려하여 스레드를 삭제하지 않기로했습니다.
다음 형식으로 '데이터 집합'이 있습니다.
id | value | ...
--------|-------|------
a | 156 | ...
b,c | 457 | ...
e,g,f,h | 346 | ...
... | ... | ...
그리고 각 id에 대한 모든 값을 복제하여 정규화하고 싶습니다.
id | value | ...
--------|-------|------
a | 156 | ...
b | 457 | ...
c | 457 | ...
e | 346 | ...
g | 346 | ...
f | 346 | ...
h | 346 | ...
... | ... | ...
내가하고있는 일은 각 그룹 (groupby 값, pd.DataFrame ())에 대해 튜플을 만드는 .groupby를 사용하여 팬다 분할 적용 적용 원칙을 적용하는 것입니다.
그룹화 할 열을 만들었습니다. 단순히 행의 ID를 계산합니다.
df['count_ids'] = df['id'].str.split(',').apply(lambda x: len(x))
id | value | count_ids
--------|-------|------
a | 156 | 1
b,c | 457 | 2
e,g,f,h | 346 | 4
... | ... | ...
행을 복제하는 방법은 다음과 같습니다.
pd.DataFrame().append([group]*count_ids)
천천히 진행하고 있지만 실제로 복잡하기 때문에 이러한 유형의 문제를 공유 할 수있는 모범 사례 또는 권장 사항을 알려 주시면 감사하겠습니다.
해결법
-
==============================
1.이 시도:
이 시도:
In [44]: df Out[44]: id value 0 a 156 1 b,c 457 2 e,g,f,h 346 In [45]: (df['id'].str.split(',', expand=True) ....: .stack() ....: .reset_index(level=0) ....: .set_index('level_0') ....: .rename(columns={0:'id'}) ....: .join(df.drop('id',1), how='left') ....: ) Out[45]: id value 0 a 156 1 b 457 1 c 457 2 e 346 2 g 346 2 f 346 2 h 346
설명:
In [48]: df['id'].str.split(',', expand=True).stack() Out[48]: 0 0 a 1 0 b 1 c 2 0 e 1 g 2 f 3 h dtype: object In [49]: df['id'].str.split(',', expand=True).stack().reset_index(level=0) Out[49]: level_0 0 0 0 a 0 1 b 1 1 c 0 2 e 1 2 g 2 2 f 3 2 h In [50]: df['id'].str.split(',', expand=True).stack().reset_index(level=0).set_index('level_0') Out[50]: 0 level_0 0 a 1 b 1 c 2 e 2 g 2 f 2 h In [51]: df['id'].str.split(',', expand=True).stack().reset_index(level=0).set_index('level_0').rename(columns={0:'id'}) Out[51]: id level_0 0 a 1 b 1 c 2 e 2 g 2 f 2 h In [52]: df.drop('id',1) Out[52]: value 0 156 1 457 2 346
from https://stackoverflow.com/questions/39078282/normalizing-data-by-duplication by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 아름다운 스프 결과에 누락 된 부분 (0) | 2018.11.28 |
---|---|
[PYTHON] 도메인이 DNSSEC로 보호되어 있는지 프로그래밍 방식으로 확인 (0) | 2018.11.28 |
[PYTHON] 파이썬에서 하프 톤 이미지 (0) | 2018.11.28 |
[PYTHON] Visual Studio Python 프로젝트에 CNTK virtualenv 추가 (0) | 2018.11.28 |
[PYTHON] pandas to_csv : csv에 팬더를 쓸 때 CSV 파일의 과학 표기법을 사용하지 않습니다. (0) | 2018.11.28 |