简体   繁体   English

pandas 中的 Pivot 表重新索引

[英]Pivot table reindexing in pandas

Having a dataframe as below:有一个 dataframe 如下:

df1 = pd.DataFrame({'Name1':['A','Q','A','B','B','C','C','C','E','E','E'],
                    'Name2':['B','C','D','C','D','D','A','B','A','B','C'],'Marks2':[10,20,6,50, 88,23,140,9,60,65,70]})
df1

#created a new frame
new=df1.loc[(df1['Marks2'] <= 50)]
new

#created a pivot table
temp=new.pivot_table(index="Name1", columns="Name2", values="Marks2")
temp

I tried to re-index the pivot table.我试图重新索引 pivot 表。

new_value=['E']
order = new_value+list(temp.index.difference(new_value))
matrix=temp.reindex(index=order, columns=order)
matrix

But the values related to 'E' is not present in pivot table.但 pivot 表中不存在与“E”相关的值。 dataframe df1 contains values related with E. I need to add the value related to E in the pivot_table dataframe df1 包含与 E 相关的值。我需要在 pivot_table 中添加与 E 相关的值

Expected output:预期 output:

图像

Based on the comments my understanding of the intended result:根据评论,我对预期结果的理解:

    E     A     B     C     D
E NaN  60.0  65.0  70.0   NaN
A NaN   NaN  10.0   NaN   6.0
C NaN   NaN   9.0   NaN  23.0
Q NaN   NaN   NaN  20.0   NaN

Code: Activate the inlcuded #print() statements to see what the steps do.代码:激活包含的#print()语句以查看这些步骤的作用。
Especially at the header 'formatting' in the end you may adapt acc.特别是在 header '格式化'到底你可以适应 acc。 your needs.您的需求。

import pandas as pd
import numpy as np

df1 = pd.DataFrame({'Name1':['A','Q','A','B','B','C','C','C','E','E','E'],
                    'Name2':['B','C','D','C','D','D','A','B','A','B','C'],
                    'Marks2':[10,20,6,50, 88,23,140,9,60,65,70]})
df1['Marks2'] = np.where( (df1['Marks2'] >= 50) & (df1['Name1'] != 'E'), 
                         np.nan, df1['Marks2'])
#print(df1)
temp=df1.pivot_table(index="Name1", columns="Name2", values="Marks2")
#print(temp)
name1_to_move = 'E'

# build new index with name1_to_move at the start (top in df idx)
idx=temp.index.tolist() 
idx.pop(idx.index(name1_to_move))
idx.insert(0, name1_to_move)
# moving the row to top by reindex
temp=temp.reindex(idx)
#print(temp)
temp.insert(loc=0, column=name1_to_move, value=np.nan)
#print(temp)
temp.index.name = None
#print(temp)
temp = temp.rename_axis(None, axis=1)
print(temp)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM