【问题标题】:Take more than one value to make a table with Python Pandas取多个值用 Python Pandas 制作表格
【发布时间】:2018-06-06 02:56:18
【问题描述】:

使用我的代码,我可以在 1 中加入两个 Excel 数据库。问题是它只向我显示收入列而不是列展示次数。为了更清楚,我留下了代码和示例。我试过了:

 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')

档案1:

存档2:

结果:

必要的:

以下是文本形式的数据框:

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

【问题讨论】:

  • 您可以将数据框作为文本粘贴到图片中吗?
  • 我刚刚编辑了它@cᴏʟᴅsᴘᴇᴇᴅ

标签: python excel python-2.7 pandas dataframe


【解决方案1】:

你可以使用:

  • 将两个 df 连接在一起
  • 使用类别ImpresionesRevenue 重塑列
  • 排序索引,二级后代
  • 通过掩码更改第一级索引并设置为索引

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

【讨论】:

  • 太好了,如果我有另一个像 Impresiones 这样的列,请致电 Impresiones two 并且我也在寻找将它添加到 xlsx 文件中。我需要更改什么代码??
  • 我认为您需要添加m1 = df.index.get_level_values(1) == 'Impresiones two' df.index = np.where(m1, 'Impresiones two', df.index.get_level_values(0)),但我只是在电话上,所以未经测试。
  • 我试过了,但我有这个错误:`IndexError: Too many levels: Index has only 1 level, not 2`
猜你喜欢
  • 2022-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-08
相关资源
最近更新 更多