【问题标题】:Flattening multidimensional table python pandas展平多维表python pandas
【发布时间】:2021-06-19 03:38:34
【问题描述】:

我是 Python 和 Pandas 的初学者,我想将多维表转换为扁平表。目前看起来如下

Day Lukas Steve
BBnr Comments BBnr Comments
1 XXXX1 2PM XXXX3 9PM
2 XXXX2 5:30PM XXXX4 7PM

我希望它是这样的:

Day Seller BBnr Comments
1 Lukas XXXX1 2PM
1 Steve XXXXX3 9PM
2 Lukas XXXX2 5:30PM
2 Steve XXXXX4 7PM

有什么想法吗?到目前为止,我用 pandas Melt 和 unstack 尝试过,但没有成功

这是我当前的代码:

import pandas as pd

df = pd.read_excel('Book1.xlsx', sheet_name="Sheet1", header=[0,1], index_col=[0])

melt = df.melt()
print(melt)

和电流输出:

     Dag       NaN   value
0  LUCAS      BBnr   XXXX1
1  LUCAS      BBnr   XXXX2
2  LUCAS  Comments     2PM
3  LUCAS  Comments  5:30PM
4  STEVE      BBnr   XXXX3
5  STEVE      BBnr   XXXX4
6  STEVE  Comments     9Pm
7  STEVE  Comments     7PM

df.head() 融化前:

Dag  LUCAS           STEVE         
      BBnr Comments   BBnr Comments
1    XXXX1      2PM  XXXX3      9Pm
2    XXXX2   5:30PM  XXXX4      7PM

【问题讨论】:

  • .stack()? Appart 从那,你得到了哪些错误?原则上melt() 应该也能正常工作
  • @maow 您好,感谢您的回复!我在帖子中添加了当前代码和输出!
  • 在熔炼操作之前你能不能打印df.head()?我想尝试一些事情:)
  • @maow 也添加了它:) ty!!
  • 我得到了与@Serge Ballesta 相同的答案:D 诀窍是将level=0 传递给stack,以便它只熔化名称并保持列 BBnr 和 Comments 完整

标签: python pandas flatten


【解决方案1】:

一个技巧是在索引中隐藏你不想用stack处理的列。

假设您的数据框是:

df = pd.DataFrame.from_dict({('Day', ''): {0: 1, 1: 2},
                             ('Lukas', 'BBnr'): {0: 'XXXX1', 1: 'XXXX2'}, 
                             ('Lukas', 'Comments'): {0: '2PM', 1: '5:30PM'},
                             ('Steve', 'BBnr'): {0: 'XXXX3', 1: 'XXXX4'},
                             ('Steve', 'Comments'): {0: '9PM', 1: '7PM'}}

它显示为:

  Day  Lukas           Steve         
        BBnr Comments   BBnr Comments
0   1  XXXX1      2PM  XXXX3      9PM
1   2  XXXX2   5:30PM  XXXX4      7PM

可以处理:

result = df.set_index('Day').stack(level=0).reset_index()

直接给出:

   Day level_1   BBnr Comments
0    1   Lukas  XXXX1      2PM
1    1   Steve  XXXX3      9PM
2    2   Lukas  XXXX2   5:30PM
3    2   Steve  XXXX4      7PM

【讨论】:

  • 您好,感谢您的回复!实际上有一点旁注:数据是从 excel 导入的,因此数据框没有字典。我不太确定这是有用的旁注还是错误。编辑:找到了,非常感谢大家!!!!!!
猜你喜欢
  • 1970-01-01
  • 2018-05-06
  • 2012-08-27
  • 2014-10-15
  • 2019-11-23
  • 2020-06-06
  • 1970-01-01
  • 2021-12-31
  • 2011-09-05
相关资源
最近更新 更多