【问题标题】:How to apply stack() function on Pandas groupby Object如何在 Pandas groupby 对象上应用 stack() 函数
【发布时间】:2019-11-17 13:07:10
【问题描述】:

我正在尝试在应用 stack() 功能时优化我的运行时。

Initial Dataframe 

  ID   SCORE1  SCORE2  YEAR
0 1111  3        4     2019
1 1111  NaN      3     2019
2 1111  5        4     2019
3 2222  6        7     2019
4 2222  2        NaN   2019
5 3333  NaN        9   2019
6 3333  4        NaN   2019
7 4444  NaN      NaN   2019
8 4444  5        6     2019

下面的这个 groupby.apply() 有效。

但是,更大的数据集需要很长时间(300 万条记录 = 25 分钟)

var = df.groupby('ID').apply(lambda x: x.iloc[:, 1:3].stack())

Output Achieved

  ID  
 1111 0  SCORE1 3
         SCORE2 4
      1  SCORE2 3
      2  SCORE1 5
         SCORE2 4
2222  3  SCORE1 6
         SCORE2 7
      4  SCORE1 2 
3333  5  SCORE2 9
      6  SCORE1 4
4444  8  SCORE1 5
         SCORE2 6

Desired output : Same

如何优化此性能?

我可以使用 transform() 吗?如何 ?它没有 stack() 调用

感谢您在处理此类情况时的所有见解

【问题讨论】:

  • 你在想什么stack函数? numpy.stack 还是别的什么?

标签: pandas numpy pandas-groupby pandas-apply


【解决方案1】:

您可以使用 melt ,我认为这里不需要 grouby

df.drop('YEAR',1).melt('ID').dropna()


df.set_index('ID').drop('YEAR',1).stack()

【讨论】:

  • 我认为 OP 也想要一个 ffill()
猜你喜欢
  • 1970-01-01
  • 2016-03-23
  • 2021-10-01
  • 2014-07-16
  • 2023-01-23
  • 2023-01-19
  • 2019-09-06
  • 2017-11-04
  • 1970-01-01
相关资源
最近更新 更多