如何在 Pandas groupby 对象上应用 stack() 函数
How to apply stack() function on Pandas groupby Object
我正在尝试在应用 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() 调用
感谢您处理此类情况的所有见解
你可以用 melt
来做,我认为这里不需要 grouby
df.drop('YEAR',1).melt('ID').dropna()
df.set_index('ID').drop('YEAR',1).stack()
我正在尝试在应用 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() 调用
感谢您处理此类情况的所有见解
你可以用 melt
来做,我认为这里不需要 grouby
df.drop('YEAR',1).melt('ID').dropna()
df.set_index('ID').drop('YEAR',1).stack()