我正在尝试通过应用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()调用
欣赏您在处理此类情况时的所有见解
答案 0 :(得分:0)
您可以使用melt
,但我认为这里grouby
不是必需的
df.drop('YEAR',1).melt('ID').dropna()
df.set_index('ID').drop('YEAR',1).stack()