python - Pandas:基于标题子字符串的部分枢轴

标签 python pandas pivot

我熟悉标准的 Pandas 数据透视功能,但我想要做的有点不同 - 而且我不喜欢使用pivot

设置代码:

import pandas as pd
import io

csvA = io.StringIO(u'''
month   chicken_a   chicken_b   chicken_c   turkey_a    turkey_b    turkey_c
1   10  20  30  1   2   3
2   11  22  33  101 202 303
''')

dfA = pd.read_csv(csvA, sep = '\t')

其产量:

   month  chicken_a  chicken_b  chicken_c  turkey_a  turkey_b  turkey_c
0      1         10         20         30         1         2         3
1      2         11         22         33       101       202       303

我想将'_a'、'_b'和'_c'部分旋转到月份,但保留'chicken'和'turkey'标题。最终结果如下所示:

  month  chicken  turkey
0    1a       10       1
1    1b       20       2
2    1c       30       3
3    2a       11     101
4    2b       22     202
5    2c       33     303

'_a', '_b', '_c' 部分始终是这样的,并且会提前知道。

我可以通过 for 循环破解这个问题,但我想知道是否有更 Pandas 的方式。

最佳答案

我找到了一个我不喜欢的解决方案,但仍然感觉有点老套,但没有循环,它可以完成工作。我绝对愿意接受更好的解决方案:

df  = dfA.set_index('month').stack().reset_index()

df['month_type']    = df['month'].astype(str) + df['level_1'].str[-1:]
df['level_1']       = df['level_1'].str[:-2]

df  = df.drop(['month'], axis = 1)
df  = df.pivot(index = 'month_type', columns = 'level_1', values = 0)
df  = pd.DataFrame(df.to_records())

关于python - Pandas:基于标题子字符串的部分枢轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54031511/

相关文章:

python - 从 CSV 文件到 Python 的实时数据流

python - 当Python中的值为 "00/00/0000"时,如何省略CSV文件中的单元格

sql - 以列的形式返回结果的动态 SQL 查询

python - Seaborn 热图未显示从字符串转换为数字的列

python - 如何向 3D Pandas DataFrame 添加嵌套列?

sql - 城市名称作为列标题

r - 整数和因子的 Pivot_longer

Python - 为什么我不能在 print 函数中使用生成器?

python - Flask 引发 `Address already in use` 与 Gunicorn 等 WSGI 服务器一起运行

python - dill 能记住一个类使用的库吗?