我有一个数据框,需要堆叠、熔化或逆轴旋转。对于每所学校,我需要为每个容量创建一个新行,并为级别创建一个新列。级别取决于容量是否 > 0。城市列也应包括在内:
data = pd.DataFrame({'school_name': {0: 'a', 1: 'b', 2: 'c'},
'primary': {0: 1, 1: 3, 2: 0},
'secondary': {0: 2, 1: 0, 2: 6},
'tertiary': {0:3, 1:6, 2:0},
'city': {0:'Bangkok', 1:'Frankfurt', 2:'Tel Aviv'}})
data
school_name primary secondary tertiary city
0 a 1 2 3 Bangkok
1 b 3 0 6 Frankfurt
2 c 0 6 0 Tel Aviv
期望的结果:
school_name levels capacity city
0 a primary 1 Bangkok
1 a secondary 2 Bangkok
2 a tertiary 3 Bangkok
3 b primary 3 Frankfurt
4 b tertiary 6 Frankfurt
5 c secondary 6 Tel Aviv
最佳答案
让我们stack
在屏蔽 primary
、secondary
和 tertiary
列中的 0
值后 reshape 数据框:
df = data.set_index(['school_name', 'city'])
df = df[df.ne(0)].stack().reset_index(name='capacity')\
.rename(columns={'level_2': 'levels'})
>>> df
school_name city levels capacity
0 a Bangkok primary 1.0
1 a Bangkok secondary 2.0
2 a Bangkok tertiary 3.0
3 b Frankfurt primary 3.0
4 b Frankfurt tertiary 6.0
5 c Tel Aviv secondary 6.0
关于python - 堆栈 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66493394/