将对角线上方的元素移动到行的开头

时间:2019-01-06 16:17:43

标签: python pandas dataframe

我有一个作为数据透视表生成的矩阵。我已包含以下数据。我需要将对角线放入第一列,这可以有效地重新排列矩阵,以便对角线的单元格成为每一行的第一列单元格。

这是在熊猫中渲染的矩阵

enter image description here

这表示矩阵的外观。

enter image description here

df = pd.DataFrame({
    'exposure':[4500,2000, 2000, 2000, 2000, 
                6000,10000,3000,2000,1000,
                2000,3000,4000,6000], 
    'due_date':['2019-01-01', '2019-01-01', '2019-01-01', '2019-01-01', '2019-01-01', 
                '2019-01-02', '2019-01-02', '2019-01-02','2019-01-01','2019-01-04',
                '2019-01-03','2019-01-03','2019-01-03','2019-01-04'], 
    'repaid_date':['2019-01-01', '2019-01-04','2019-01-01', '2019-01-03', '2019-01-02', 
                   '2019-01-03','2019-01-04', '2019-01-02', '2019-01-03', '2019-01-04',
                   '2019-01-03','2019-01-04','2019-01-03','2019-01-04']})

pivot = df.pivot_table(values='exposure', index='due_date', columns='repaid_date', aggfunc=len)
pivot.fillna(0,inplace=True)
pivot.reset_index(inplace=True)

1 个答案:

答案 0 :(得分:1)

在填充或重置索引之前,您可以使用Divakar的justify函数证明NaN合理。

pivot = df.pivot_table(values='exposure', 
                       index='due_date', 
                       columns='repaid_date', 
                       aggfunc='size')
pivot[:] = justify(pivot.values, invalid_val=np.nan, axis=1, side='left')
pivot.fillna(0, downcast='infer').reset_index()

repaid_date    due_date  2019-01-01  2019-01-02  2019-01-03  2019-01-04
0            2019-01-01           2           1           2           1
1            2019-01-02           1           1           1           0
2            2019-01-03           2           1           0           0
3            2019-01-04           2           0           0           0