python - 如果 pandas 中没有其他唯一列,如何将多列转换为单独的行/值?
问题描述
以下是示例
费率、价值 2019Q01 | 费率、价值 2019 年 Q02 | 费率、价值 2019Q03 | 费率、价值 2019Q04 | 销售额,价值 2019Q01 | 销售额,价值 2019Q02 | 销售额,价值 2019Q03 | 销售额,价值 2019Q04 |
---|---|---|---|---|---|---|---|
100 | 150 | 200 | 300 | 400 | 450 | 500 | 600 |
结果应该是
时期 | 费率、价值 | 销售额、价值 |
---|---|---|
2019Q01 | 100 | 400 |
2019Q02 | 150 | 450 |
2019Q03 | 200 | 500 |
2019Q04 | 300 | 600 |
我已经尝试过融化和wide_to_long,但无法得到结果。谢谢
解决方案
通过columns
属性尝试,然后stack()
:
df.columns=df.columns.str.replace('values','').str.split(', ',expand=True)
df=df.stack().droplevel(0).rename_axis(index='Period').add_suffix(', values').reset_index()
或按照建议@Cytorak
df.columns = df.columns.str.rsplit(' ', 1, expand=True)
df=df.stack().droplevel(0).rename_axis(index='Period').reset_index()
的输出df
:
Period Rates, values Sales, values
0 2019Q01 100 400
1 2019Q02 150 450
2 2019Q03 200 500
3 2019Q04 300 600
推荐阅读
- javascript - IE 11 数组显示重复的索引
- scala - 如何使用 Behavior.receiveMessage 处理生命周期信号
- python - 如何在 python 中将 0²0 36 0 ² 6 4 转换为 020360264?
- android - ViewModel 中的静态键
- tbb - 限制 tbb 中的线程数
- image - 使用picturerecorder将图片保存在画布上,但它返回null
- jquery - 如何使用 jQuery 过滤事件?
- python - Python 句柄强化路径操作
- swift - 上下纸牌游戏 - Swift 4.2
- javascript - 使用 AngularJS 1.6 创建具有多个输入的多个表