Как заменить столбец, используя pandas, соответствующим значением из другого файла? - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть лист Excel со следующими столбцами.

Date, Ship-to-party ,Volume
1/09/2019 PQ01    1000
2/09/2019 PQXC    2500
...

Другой лист похож;

Document Date Deliveryid Sales
01/09/2019    153678     350
01/09/2019    236742     400

Другой лист похож;

Time        Site    Dips
01/09/2019  SiteA   1500
01/09/2019  SiteB   1222
...

Вдругой файл excel / csv Я определил, что означает доставка.То есть у меня изначально есть 3 разных рабочих листа, каждый из которых содержит столбец (например: sitename) под разными именами.(например: «Отправитель», «Sitename», «Deliveryid»). Мое требование - объединить все 3 рабочих листа в один лист на основе даты и названия места вместе с другими значениями.Для этого у меня есть отдельный лист, в котором указано, какое значение для отправки получателю = Sitename = Deliveryid (есть 3 столбца)

Как заменить исходные столбцы из 3 листов на основе одного имени и объединить ихполучить один лист Excel с использованием панд?

Мой лист карт содержит

ship-to party  Sitename  Deliveryid

PQ01           SiteA      543892
PQXY           SiteB      539081
....

Я ожидаю, что мой окончательный лист будет выглядеть как

Date       Sitename  Sales Dips Volume
1/09/2019   SiteA    500   1000 1500
1/09/2019   SiteB    100   500  2000
....

Я пытаюсь сделать то же самое, что упомянул Хюэ;

def write_dips(writer):
    file_path = '/Users/ratha/PycharmProjects/DataLoader/output.xlsx'
    mappingfilepath ='/Users/ratha/PycharmProjects/DataLoader/data/mappings/File Mapping.csv'

    df_dips = pd.read_excel(file_path, sheet_name='DipsSummary')
    df_sales = pd.read_excel(file_path, sheet_name='SaleSummary')
    df_delivery = pd.read_excel(file_path, sheet_name='DeliverySummary')
    df_mapping = pd.read_csv(mappingfilepath, delimiter=',', skiprows=[1])
    df2 = df_dips.merge(df_mapping, left_on='Site',right_on='SHIP TO NAME').\
        merge(df_sales,left_on ='Delivery ID',right_on='Deliveryid').\
        merge(df_delivery, left_on='SHIP-TO PARTY',right_on='Ship-To Party')

    print(df2.dtypes) <--this prints all columns..so merging works
    x = df2.groupby(['Dip Time', 'Site', 'Tank ID', 'Product', 'Volume',
                'IdassId', 'TankNo', 'GradeNo','Sales','Ship-To Party', 'Material','Qty in Stock UoM'], as_index=False).apply(atg_aggregation)
    x.to_excel(writer, sheet_name='DipsNewSummary')

Но конечный выходной файл ничего не содержит. Я пытаюсь сгруппировать группу правильно (я использую group by для всех столбцов, представленных на всех 3 листах?

После объединения я ожидаю, что мой листдолжно быть как; (я ожидаю выбрать несколько столбцов на всех 3 листах, поэтому применяем все столбцы в методе groupby)

Dip Time  Site  Tank ID Product Dips DeliveryId Sales Ship-To Party 
1/09/2019 SiteA  1      Diesel  500  526781     150   PQ01

1 Ответ

0 голосов
/ 24 сентября 2019

Вы хотите объединить 3 листа, вам просто нужно объединить, а не группировать.

Вот пример кода, который вы можете попробовать, и дайте мне знать, если это поможет.

df
Out[29]: 
  ship-to party Sitename  Deliveryid
1          PQ01    SiteA    543892.0
2          PQXY    SiteB    539081.0

df1
Out[30]: 
        Date Ship-to-party  Volume
0  1/09/2019          PQ01  1000.0
1  2/09/2019          PQXC  2500.0

df1=df1.merge(df,left_on='Ship-to-party',right_on='ship-to party')

df1
Out[32]: 
        Date Ship-to-party    ...      Sitename Deliveryid
0  1/09/2019          PQ01    ...         SiteA   543892.0

[1 rows x 6 columns]
df1.columns=['Date', 'Ship-to-party', 'Volume', 'ship-to party', 'Site',
       'Deliveryid']

Теперь объедините df1 с другими листами.

df1.merge(df2,on='Site').merge(df3,on='Deliveryid')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...