Как переставить строки в столбцы в Pandas на основе групп строк - PullRequest
0 голосов
/ 24 мая 2018

Проблема, с которой я столкнулся, заключается в том, что если у меня есть следующий фрейм данных, отсортированный по столбцам «Номер клиента» и «Дата», как получить даты каждого клиента и соответствующие зарплаты в новых столбцах один за другим.

    df = pd.DataFrame({'Customer Number':[1,1,1,2,2,3,3,3],
                'Date': [2013, 2014, 2015, 2016, 2017, 2013, 2014, 2015],
                'Salaries': [100, 200, 200, 300, 300, 4000, 5000, 5000]})

производит:

   Customer Number  Date  Salaries
0                1  2013       100
1                1  2014       200
2                1  2015       200
3                2  2016       300
4                2  2017       300
5                3  2013      4000
6                3  2014      5000
7                3  2015      5000

Для этой проблемы вывод, который я пытаюсь получить, выглядит примерно так:

    Customer Number  Date 1  Salary 1  Date 2  Salary 2  Date 3  Salary 3
0                 1    2013       100    2014       200    2015       200
1                 2    2016       300    2017       300     NaN       NaN
2                 3    2013      4000    2014      5000    2015      5000

Я попытался использовать сводные таблицы, чтобы упорядочить этоdata и numpy для изменения формы таблицы, но не вполне удается получить новые столбцы для дат и зарплат таким образом.Я надеялся, что найдется хорошее и простое решение для этого, но не смог найти его.Буду очень признателен за любую помощь с этой проблемой.

1 Ответ

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

cumcount

c = 'Customer Number'
df.set_index([c, df.groupby(c).cumcount() + 1]).unstack().sort_index(1, 1)

                   Date Salaries    Date Salaries    Date Salaries
                      1        1       2        2       3        3
Customer Number                                                   
1                2013.0    100.0  2014.0    200.0  2015.0    200.0
2                2016.0    300.0  2017.0    300.0     NaN      NaN
3                2013.0   4000.0  2014.0   5000.0  2015.0   5000.0
...