"표준화 된"것으로 설명 할 수있는 팬더 데이터 프레임이 있습니다. 디스플레이 목적으로 데이터를 "표준화 해제"하고 싶습니다. 즉, 출력 레코드에 같은 행을 넣으려는 여러 키 값에 일부 데이터를 분산시키고 자합니다. 일부 레코드는 결합 될 때 합계되어야합니다. (비공개 : 누군가가 "비정규 화"보다 더 좋은 용어를 가지고 있다면,이 질문을 편집하거나 주석에서 말하십시오.)Python Pandas : 한 데이터 프레임에서 다른 데이터 프레임으로 데이터 비정규 화
많은 열이있는 팬더 데이터 프레임으로 작업하고 있으므로 아래에 간단한 버전이 표시됩니다.
다음 코드는 (거의) 정규화 된 소스 데이터 프레임을 설정합니다. (두 번째 코드 블록에 대한 조언을 찾고 있는데,이 코드 블록은 컨텍스트를 제공하기위한 것입니다.) 실제 데이터와 유사하게 데이터를 식별하는 데 몇 가지 중복이 있으며 합계가되는 숫자가 있습니다.
import pandas as pd
dates = pd.date_range('20170701', periods=21)
datesA1 = pd.date_range('20170701', periods=11)
datesB1 = pd.date_range('20170705', periods=9)
datesA2 = pd.date_range('20170708', periods=10)
datesB2 = pd.date_range('20170710', periods=11)
datesC1 = pd.date_range('20170701', periods=5)
datesC2 = pd.date_range('20170709', periods=9)
cols=['Date','Type','Count']
df_A1 = pd.DataFrame({'Date':datesA1,
'Type':'Apples',
'Count': np.random.randint(30,size=11)})
df_A2 = pd.DataFrame({'Date':datesA2,
'Type':'Apples',
'Count': np.random.randint(30,size=10)})
df_B1 = pd.DataFrame({'Date':datesB1,
'Type':'Berries',
'Count': np.random.randint(30,size=9)})
df_B2 = pd.DataFrame({'Date':datesB2,
'Type':'Berries',
'Count': np.random.randint(30,size=11)})
df_C1 = pd.DataFrame({'Date':datesC1,
'Type':'Canteloupes',
'Count': np.random.randint(30,size=5)})
df_C2 = pd.DataFrame({'Date':datesC2,
'Type':'Canteloupes',
'Count': np.random.randint(30,size=9)})
frames = [df_A1, df_A2, df_B1, df_B2, df_C1, df_C2]
dat_fra_source = pd.concat(frames)
또한 다음 코드는 본인의 의도를 실현합니다. 원본 데이터 프레임에는 날짜 및 과일 유형 (A, B 및 C)마다 여러 행이 있습니다. 대상 데이터는 A, B의 합계로, 하루에 하나의 행을 가지고 있으며, C.
dat_fra_dest = pd.DataFrame(0, index=dates, columns=['Apples','Berries','Canteloupes'])
for index,row in dat_fra_source.iterrows():
dat_fra_dest.at[row['Date'],row['Type']]+=row['Count']
이 할 수있는 청소기 방법이 있는지 내 질문은 : 제로를 필요로하지 않는 방법 - 초기화 및/또는 라인 단위가 아닌 전체 데이터 프레임에서 작동하는 방식. 또한 효율적인 구현 방법에 대해 회의적입니다. 또한 단순화 된 예제에서 "개수"만 다루는 동안 실제 예제에는 추가 열이 있습니다. A, B, C의 경우 카운트뿐만 아니라 체중과 볼륨도 있다고 생각하십시오.
나는 매우 비슷한 일을 할 - 당신이 1-3 가장 편리하다고 아래의 옵션이있는 어떤 조언을해야합니까? – goose