合并2个数据框无法正常工作

时间:2019-12-16 18:06:59

标签: python python-3.x numpy dataframe merge

我正在尝试运行一个脚本,该脚本评估可能的客户属性会导致向每个客户收取的利率。

我遇到了麻烦: cf_op = pd.merge(left = cf_op,right = datos_compra,how ='left',left_index = True,right_index = True).fillna(0)

合并无法正常进行。在nan的结果中,除01/21/2020和02/20/2020中的668691外,每天应为0。

import numpy as np
import pandas as pd
import datetime
import pygsheets

#input de vendedor

gc = pygsheets.authorize(service_file='/Users/diegokenny/Documents/Python scripts/Cash Flow dCaC-454d56c8c130.json')

sh1 = gc.open('Cotizador Versión INVERNADA')

wks = sh1[2]

datos_vendedor1 = wks.get_as_df(has_header = False, numerize=False, value_render= 'UNFORMATTED_VALUE', include_tailing_empty=False, include_tailing_empty_rows = False, start = 'B11', end='E11')
datos_vendedor2 = wks.get_as_df(has_header = False, numerize=False, value_render= 'UNFORMATTED_VALUE', include_tailing_empty=False, include_tailing_empty_rows = False, start = 'B12', end='E12')
datos_vendedor = pd.concat([datos_vendedor1, datos_vendedor2], axis=1, join='outer')
importe_vendedor = wks.get_as_df(has_header = False, numerize=False, value_render= 'UNFORMATTED_VALUE', include_tailing_empty=False, include_tailing_empty_rows = False, start = 'B10', end='B10') * 1.105
datos_vendedor = pd.concat([importe_vendedor, datos_vendedor], axis=1, join='outer')
datos_vendedor.columns = ['importe_vendedor',
                          'plazo_v1',
                          'plazo_v2',
                          'plazo_v3',
                          'plazo_v4',
                          'plazo_v1_p',
                          'plazo_v2_p',
                          'plazo_v3_p',
                          'plazo_v4_p']

datos_vendedor['fecha_probable_carga'] = datetime.date.today()
datos_vendedor['fecha_probable_carga'] = pd.to_datetime(datos_vendedor['fecha_probable_carga'], format = '%Y/%m/%d')

datos_vendedor['plazo_v1'] = pd.to_timedelta(datos_vendedor['plazo_v1'],unit='D')

#input de comprador

sh1 = gc.open('Cotizador Versión INVERNADA')

wks = sh1[4]

datos_comprador = wks.get_as_df(has_header = True, numerize=False, value_render= 'UNFORMATTED_VALUE', include_tailing_empty=False, include_tailing_empty_rows = False, start = 'D1', end='K367')

datos_comprador.columns = ['plazo_c1','plazo_c2','plazo_c3','plazo_c4','plazo_c1_p','plazo_c2_p','plazo_c3_p','plazo_c4_p']

datos_comprador = datos_comprador.drop(datos_comprador[datos_comprador.plazo_c1 == '#N/A (Did not find value '' in VLOOKUP evaluation.)'].index)

datos_comprador['plazo_c1'] = pd.to_timedelta(datos_comprador['plazo_c1'],unit='D')

datos_comprador['fecha_probable_carga'] = datetime.date.today()
datos_comprador['fecha_probable_carga'] = pd.to_datetime(datos_comprador['fecha_probable_carga'], format = '%Y/%m/%d')

# armo tabla de saldos por día por cada operación


datos_comprador['importe_vendedor'] = datos_vendedor['importe_vendedor'][0]

datos_vendedor['fecha_pago_1'] = datos_vendedor['fecha_probable_carga'] + datos_vendedor['plazo_v1']

datos_vendedor['monto_pago_1'] = datos_vendedor['importe_vendedor'] *  datos_vendedor['plazo_v1_p'] / 100

datos_comprador['fecha_cobro_1'] = datos_comprador['fecha_probable_carga'] + datos_comprador['plazo_c1']

datos_comprador['monto_cobro_1'] = datos_comprador['importe_vendedor'] *  datos_comprador['plazo_c1_p'] / 100

datos_vendedor_fechas = datos_vendedor.loc[:,['fecha_pago_1']]

datos_vendedor_montos = datos_vendedor.loc[:,['monto_pago_1']]

datos_vendedor_fechas = datos_vendedor_fechas.transpose().reset_index()
datos_vendedor_montos = datos_vendedor_montos.transpose().reset_index()

datos_venta = pd.concat([datos_vendedor_fechas, datos_vendedor_montos], axis=1, sort=False)
datos_venta.columns = ['index1', 'fecha_pago', 'index2', 'monto_pago']
datos_venta = datos_venta.drop(['index1','index2'], axis=1)
datos_venta = datos_venta.set_index('fecha_pago')
datos_venta = datos_venta.groupby(level=0).sum()

cf_op = np.arange(datetime.date.today(), 120, 1)
cf_op = pd.DataFrame(index=cf_op)
cf_op = cf_op.merge(datos_venta, how='left', left_index=True, right_index=True).fillna(0)

# importo el cashflow del día

sh = gc.open('DB Finanzas')
wks = sh[0]

cashflow = wks.get_as_df(has_header = True, include_tailing_empty=False, include_tailing_empty_rows = False, numerize=True, value_render= 'UNFORMATTED_VALUE')
cashflow['Date'] = cashflow['Date'] - 25569
cashflow['Date'] = pd.to_timedelta(cashflow['Date'],unit='D')
aux = pd.to_datetime(1970/1/1, format = '%Y-%m-%d').replace(second=0, microsecond=0, nanosecond=0)
cashflow['Date'] = aux + cashflow['Date']
cashflow = cashflow.set_index('Date')
today = pd.to_datetime(datetime.date.today(), format = '%Y-%m-%d').replace(second=0, microsecond=0, nanosecond=0)
cashflow = cashflow.loc[[today]].transpose()
cashflow = cashflow.set_index(np.arange(datetime.date.today(), 120, 1))
cashflow.columns = ['old']


for row in datos_comprador.itertuples():
    row = pd.DataFrame(data=row).T
    row = row.iloc[:,1:]
    row.columns = datos_comprador.columns
    datos_comprador_fechas = row.loc[:,['fecha_cobro_1']].transpose().reset_index()

    datos_comprador_montos = row.loc[:,['monto_cobro_1']].transpose().reset_index()

    datos_compra = pd.concat([datos_comprador_fechas, datos_comprador_montos], axis=1, sort=False)

    datos_compra.columns = ['index1', 'fecha_cobro', 'index2', 'monto_cobro']
    datos_compra = datos_compra.drop(['index1','index2'], axis=1).set_index('fecha_cobro').groupby(level=0).sum()

    cf_op = pd.merge(left= cf_op, right= datos_compra, how='left', left_index=True, right_index=True).fillna(0)

0 个答案:

没有答案