python - 跨多列融合 DataFrame
问题描述
我有一个这样的 DataFrame,其中包含 A、B、C 和 D 列以及日期范围表示为字符串的索引:
index A B C D
03/05/2020-09/05/2020 0.000 3456.000 123.254 0.000
26/04/2020-02/05/2020 0.000 123.123 555.255 0.000
19/04/2020-25/04/2020 9.253 0.000 223.1310 0.000
如何将其融合为这种格式,将日期范围字符串分组为索引,将 VALUE 和 ITEMS 分组为列?
DATE VALUE ITEM
03/05/2020-09/05/2020 0.000 A
03/05/2020-09/05/2020 3456.000 B
03/05/2020-09/05/2020 123.254 C
03/05/2020-09/05/2020 0.000 D
26/04/2020-02/05/2020 0.000 A
26/04/2020-02/05/2020 123.123 B
26/04/2020-02/05/2020 555.255 C
26/04/2020-02/05/2020 0.000 D
19/04/2020-25/04/2020 9.253 A
19/04/2020-25/04/2020 0.000 B
19/04/2020-25/04/2020 223.1310 C
19/04/2020-25/04/2020 0.000 D
解决方案
这对你有用吗
df.unstack().reset_index(level = 0).sort_values('index')
...并根据需要重命名或重新排序列和行。
df.unstack().reset_index(level = 0).sort_values('index').rename({'level_0':'ITEM',0:'VALUE'}, axis = 1)[['VALUE','ITEM']].merge(df.reset_index()['index'], how = 'inner', right_on = 'index', left_index = True).sort_index().set_index('index').rename_axis(index = 'DATE')
结果与您的示例相符。
VALUE ITEM
DATE
03/05/2020-09/05/2020 0.000 A
03/05/2020-09/05/2020 3456.000 B
03/05/2020-09/05/2020 123.254 C
03/05/2020-09/05/2020 0.000 D
26/04/2020-02/05/2020 0.000 A
26/04/2020-02/05/2020 123.123 B
26/04/2020-02/05/2020 555.255 C
26/04/2020-02/05/2020 0.000 D
19/04/2020-25/04/2020 9.253 A
19/04/2020-25/04/2020 0.000 B
19/04/2020-25/04/2020 223.131 C
19/04/2020-25/04/2020 0.000 D
推荐阅读
- c++ - Qt 5.8 或更高版本如何使用 ROS?
- php - 2019 PHPMailer 6.07 / PHP Scrip 如何发送电子邮件工作示例
- git - 当 GitHub 上的 master 分支更新时,刷新 ubuntu 服务器上的 repo。我怎样才能做到这一点?
- c# - 使用 ASP.NET Core MVC 控制器将 RestSharp POST 请求连接到 Web API 的问题
- javascript - 我想让球在画布底部消失时以新的随机速度、颜色和位置重绘
- c# - Azure DevOps 测试在 RELEASE 上成功运行,在 DEBUG 上无限期运行
- swift - Swift 5.0.1 编译器无法导入使用 Swift 4.2.1 编译的模块
- bash - 我可以使用此 for 循环将行计数值旁边的文件名添加到其特定文件吗?
- java - 如何在java中显示一个实例而不是显示三个实例?
- google-apps-script - 如何在加载电子表格时隐藏工作表?