Сводные / групповые данные из динамического фрейма - PullRequest
0 голосов
/ 08 мая 2018

Данные присутствуют в следующей структуре:

s.No| Item Name | Source1 | Price1 | Source 2| Price 2| ....
1   | coffee    | website1| 3.5    | website2| 3.5    |
2   | Tea       | website3| 4.5    | website1| 4.5    |
3   | Soft Drink| website1| 1.5    | website2| 2.5    |

Желаемый Ouput хотел использовать Excel или Python-панд

ItemName| website1 | website2| website3
coffee  |   3.5    |    3.5  |   na
Tea     |   4.5    |    na   |   4.5
Soft Drink| 1.5    |    2.5  |   na

Процесс составления таблиц требует много ручного труда и чрезвычайно подвержен ошибкам. Может кто-нибудь помочь мне написать код для сценария Excel VB или для Python - pandas, пожалуйста

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Вот решение:

pvt1 = df.pivot(index='Item_Name', columns='Source1', values='Price1').reset_index()
pvt2 = df.pivot(index='Item_Name', columns='Source2', values='Price2').reset_index()

pvt = pd.merge(pvt1, pvt2, on='Item_Name')

, что дает нам:

    Item_Name  website1_x  website3  website1_y  website2
0  Soft_Drink         1.5       NaN         NaN       2.5
1         Tea         NaN       4.5         4.5       NaN
2      coffee         3.5       NaN         NaN       3.5

Затем, это код, который в настоящее время обрабатывает website1, но его необходимо исправить, чтобы он действовал на все такие столбцы:

pvt['website1'] = pvt['website1_x'].combine_first(pvt['website1_y'])
pvt.drop(['website1_x', 'website1_y'], axis=1, inplace=True)

Выход:

    Item_Name  website3  website2  website1
0  Soft_Drink       NaN       2.5       1.5
1         Tea       4.5       NaN       4.5
2      coffee       NaN       3.5       3.5
0 голосов
/ 08 мая 2018

Использование pandas, zip и распаковка кортежей:

prices = pd.DataFrame(index=df['Item Name'])
for idx, s_no, item, *row in df.itertuples():
    # print(item, row)
    iters = [iter(row)] * 2
    for source, price in zip(*iters):
        # print(source, price)
        prices.loc[item, source] = price
Item Name website1    website2    website3
coffee        3.5 3.5 na
Tea           4.5 na  4.5
Soft Drink    1.5 2.5 na

Если s.No является индексом, удалите idx из for-петля

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...