2017-12-24 14 views
3

私のコードでは、2つのExcelデータベースを1つにまとめることができます。問題は、それが私に収益の列のみを表示し、列の表示は表示しないことです。より明確にするために、コードとサンプルを残します。私は試してみました:複数の値をとり、Python Pandasでテーブルを作成する

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

はテキストとしてデータフレームです使用:

  • カテゴリ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 2 'と私は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:多すぎるレベル:インデックスは1レベルではなく、2である' –

関連する問題