python - 堆栈 Pandas 数据框

标签 python pandas pandas-melt

我有一个数据框,需要堆叠、熔化或逆轴旋转。对于每所学校,我需要为每个容量创建一个新行,并为级别创建一个新列。级别取决于容量是否 > 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在屏蔽 primarysecondarytertiary 列中的 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/

相关文章:

python - 如何修剪 pandas.read_csv 中的标题值

python - 我可以使用未记录的方法 pathlib.Path.absolute() 吗?

python - MySQL 连接器无法处理参数

python - 使用 python 列出网页中的链接

基于列名前缀的 Pandas 数据透视列

python - 如何折叠/旋转多个 Pandas 列

python - 对 pandas 数据框中的数据进行分组和重新排序

pandas - 如何在 jupyter notebook 中增加 pandas.DataFrame.plot 的图像大小

python - 具有不同轴范围的 Pandas 平行图

python - 如何在pandas python中使用一列(有一个项目列表)制作长格式?