【问题标题】:Finding an efficient way to reshape a dataframe: from n*m to 1*(n+m)寻找重塑数据框的有效方法:从 n*m 到 1*(n+m)
【发布时间】:2020-07-02 02:13:24
【问题描述】:

我正在寻找一种将 N*M 数据帧重塑为 1*(N*M) 数据帧的有效方法:

输入>

df1

ID   distUnit col_a   col_b
1000   150      35     55
1000   250      10     20
1200   150      12     13
1200   250      16     20

期望的输出>

ID   col_a_150   col_b_150  col_a_250 col_b_250
1000   35            55        10          20
1200   12            13        16          20

我的想法>

  1. 遍历 df1 中的每一行
  2. 根据row['distUnit']的值,为col_acol_b添加前缀
  3. 使用combined_first 将处理后的行添加回结果数据帧

具有挑战性的部分>

由于我输入数据的大小是14440 * 20,所以我的想法不够高效。

想知道有什么更好的实现方法来解决这个问题吗?

感谢阅读。

【问题讨论】:

  • 把这个按照distUnit拆分成两个DF,然后把ID键控的两个合并。这应该给你一个单行操作,而不是遍历数据框。
  • 感谢您的想法。应避免迭代并记住分离的想法

标签: python pandas


【解决方案1】:

如果对 (ID, distUnit) 在您的数据集中是唯一的,您可以像这样简单地“解开”您的数据框:

df=df.groupby(['ID','distUnit'])['col_a','col_b'].mean().unstack()
df.columns =  [f'{col[0]}_{col[1]}' for col in df.columns.values]

查看this 问题以了解类似方法。

【讨论】:

  • 谢谢。这种方法让我对 pandas Group by 更加熟悉了。
猜你喜欢
  • 2019-02-27
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
  • 2018-10-21
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多