如何根据行组将行重新排列到Pandas中的列中

时间:2018-05-24 02:29:29

标签: python pandas dataframe pivot

我遇到的问题是,如果我有以下按客户编号和日期列排序的数据框,如何逐个获取每个客户的日期和相应的工资。

    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

我已经尝试使用数据透视表来安排这些数据并将numpy用于重塑表格,但却无法以这种方式获得日期和工资的新列。我希望有一个很好的简单的解决方案,但无法找到它。我真的很感激这个问题的任何帮助。

1 个答案:

答案 0 :(得分:1)

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