2017-12-24 25 views
3

제 코드로 두 개의 엑셀 데이터베이스를 결합 할 수 있습니다. 문제는 단지 수입 만 표시하고 열 노출은 표시하지 않는다는 것입니다. 좀 더 명확히하기 위해 코드와 예제를 남겨 두었습니다. 나는 시도했다 :둘 이상의 값을 가지고 파이썬 팬더로 테이블을 만듭니다.

df1 = df1.pivot(index = "Cliente", columns='Fecha', values=['Impresiones','Revenue']) 

그러나 나는 그와 함께 오류가 : Exception: Data must be 1-dimensional

코드 :

import pandas as pd 
import pandas.io.formats.excel 

# Leemos ambos archivos y los cargamos en DataFrames 
df1 = pd.read_excel("archivo1.xlsx") 
df2 = pd.read_excel("archivo2.xlsx") 

# Pivotamos ambas tablas 
df1 = df1.pivot(index = "Cliente", columns='Fecha', values='Revenue') 
df2 = df2.pivot(index = "Cliente", columns='Fecha', values='Revenue') 

# Unimos ambos dataframes tomando la columna "Cliente" como clave 
merged = pd.merge(df1, df2, right_index =True, left_index = True, how='outer') 
merged.sort_index(axis=1, inplace=True) 

# Creamos el xlsx de salida 
pandas.io.formats.excel.header_style = None 

with pd.ExcelWriter("Data.xlsx", 
        engine='xlsxwriter', 
        date_format='dd/mm/yyyy', 
        datetime_format='dd/mm/yyyy') as writer: 

    merged.to_excel(writer, sheet_name='Sheet1') 

archivo1 :

enter image description here

archivo2 :

enter image description here

결과 : 필요한

enter image description here

:

archivo1: 
Fecha Cliente Impresiones Revenue 
21/12/17 Jose 12345 $989 
21/12/17 Martin 3245 $10 
21/12/17 Pedro 645  $879 
21/12/17 Esteban 2345 $899 
21/12/17 Mauro 654  $98 

archivo2: 
Fecha Cliente Impresiones Revenue 
20/12/17 Esteban 12345 $150 
20/12/17 Martin 3245 $20 
20/12/17 Pedro 645  $3000 
20/12/17 Mauro 2345 $50 
20/12/17 Jose 654n $667 
+0

과거에 할 수 있습니까? 사진 속의 텍스트로 데이터 프레임을 만드시겠습니까? –

+0

방금 ​​편집했습니다. @ cᴏʟᴅsᴘᴇᴇᴅ –

답변

4

당신은 할 수 있습니다 여기에 enter image description here

텍스트로 dataframe 있습니다 용도 :

  • 범주 ImpresionesRevenue
  • 정렬 인덱스 번째 레벨 하위 마스크 인덱스
  • 변화 첫번째 레벨 칼럼 모두 DF를 함께
  • 모양 변경 가입 인덱스
설정된
df = (pd.concat([df1,df2]) 
     .set_index(["Cliente",'Fecha']) 
     .stack() 
     .unstack(1) 
     .sort_index(ascending=(True, False))) 

m = df.index.get_level_values(1) == 'Impresiones' 
df.index = np.where(m, 'Impresiones', df.index.get_level_values(0)) 
print (df) 
Fecha  20/12/17 21/12/17 
Esteban   $150  $899 
Impresiones 12345  2345 
Jose   $667  $989 
Impresiones  654n 12345 
Martin   $20  $10 
Impresiones  3245  3245 
Mauro   $50  $98 
Impresiones  2345  654 
Pedro   $3000  $879 
Impresiones  645  645 
+0

멋지 네요. 'Impresiones'와 같은 다른 열이'Impresiones two '라고하고 xlsx 파일에 추가하려고합니다. 코드를 변경할 필요가 있습니까? –

+1

'm1 = df.index.get_level_values ​​(1) == 'Impresiones two'를 추가해야한다고 생각합니다. df.index = np.where (m1, 'Impresiones two', df.index.get_level_values ​​(0))', 하지만 나는 전화를 통해서만 시험을 보았습니다. – jezrael

+0

그걸로 해봤지만이 오류가 있습니다 :'IndexError : 너무 많은 수준 : 색인은 단 하나의 수준, 2가 아닙니다' –