我有一个数据帧,我需要堆叠、融化或取消填充。对于每所学校,我需要为每个能力设置一个新行,并为级别设置一个新列。级别取决于容量是否为>;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
在筛选大于0的行之前,您可以使用pivot_longerfrom pyjanitor来重塑数据:
您还可以使用pandas wide_to_long:
您的问题已被编辑,因此此答案应足够:
我将用nan替换0值,因为我知道这意味着该功能不存在
我想你需要的是融化。(并删除nan值)
如果您不喜欢索引,请重置它们
让我们^{} 在屏蔽了
primary
、secondary
和tertiary
列中的0
值之后,重新塑造数据帧:相关问题 更多 >
编程相关推荐