我遇到的问题是,如果我有以下按客户编号和日期列排序的数据框,如何逐个获取每个客户的日期和相应的工资。
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用于重塑表格,但却无法以这种方式获得日期和工资的新列。我希望有一个很好的简单的解决方案,但无法找到它。我真的很感激这个问题的任何帮助。
答案 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