【问题标题】:Pandas Data Frame how to merge columnsPandas Dataframe 如何合并列
【发布时间】:2018-09-07 01:39:51
【问题描述】:

我有一个如图所示的 pandas 数据框。我怎样才能把它变成如下表。 (演示在 excel 中,但我只是想向您说明表格的外观 - 这个问题与从/到 excel 导入和导出数据框无关)

谢谢

【问题讨论】:

  • 这还不清楚。在pandas 本身中,当您将它们可视化时,您不会得到这些“组合单元格”。据我所知,你不能以你想要的方式将你的输出与 from pandas 的组合行输出到 Excel 中。那么您到底在寻找什么?
  • 我只是想知道是否有像第二个表(下表)那样显示熊猫数据框。我也不想将表格提取到 excel 或从 excel 加载表格。我只是想知道我们是否可以简单地使用 pandas 命令显示如下表中的“组合单元格”
  • @PhuongDuyenHuynhNgoc 不,pandas 不是可视化库,因此要求以非标准方式显示表格是没有意义的。你想在什么情况下这样做?

标签: python pandas dataframe


【解决方案1】:

这是不可能的。

基础pandas.DataFrame 对象是numpy 数组,它们不会按照您建议的方式对数据进行分组。因此,不能将任意列显示为分组数据。

选项 1

可以部分使用 MultiIndex 复制您想要的输出:

import pandas as pd

df = pd.DataFrame([['AAA', 8, 2, 'BBB'],
                   ['AAA', 9, 5, 'BBB'],
                   ['AAA', 10, 6, 'BBB']],
                  columns=['Name', 'Score1', 'Score2', 'PM'])

res = df.set_index(['Name', 'PM'])

结果:

          Score1  Score2
Name PM                 
AAA  BBB       8       2
     BBB       9       5
     BBB      10       6

选项 2

或者您可以在 3 列上添加一个虚拟列和 set_index

df['dummy'] = 0
res = df.set_index(['Name', 'PM', 'dummy'])

结果:

                Score1  Score2
Name PM  dummy                
AAA  BBB 0           8       2
         0           9       5
         0          10       6

【讨论】:

  • 非常感谢您的回答,正是我要找的。​​span>
  • 选项 2 中的虚拟列是做什么用的?与选项 1 相比,我看不出有太大区别,只是选项 2 中添加了一个新的虚拟列。
  • @ollydbg23,OP 对 视觉表示 很感兴趣(就像对 Pandas 的误导一样)。从视觉上看,BBB 在选项 1 中重复,而不是在选项 2 中。
  • @jpp,谢谢你的回复,确实,我没有注意到两个选项中“PM”列的区别。
【解决方案2】:

您拥有的数据框看起来不错。这真的取决于你想要做什么。

如果您尝试返回名称为 AAA 且 PM 为 BBB 的数据框,则应使用 pandas 查找

dfnew = df[(df.Name == 'AAA') & (df.PM == 'BBB')]

【讨论】:

  • 您好,谢谢您的回答,但我想您误解了我的意思,我的意思是我如何从上面的表格转到下面的表格。因为列名和PM是一样的,所以想合并成一个值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 1970-01-01
  • 1970-01-01
  • 2019-11-10
  • 2020-10-02
相关资源
最近更新 更多