gpt4 book ai didi

python - 解析 pandas 数据帧的有效方法

转载 作者:太空宇宙 更新时间:2023-11-03 14:34:19 27 4
gpt4 key购买 nike

我有一个包含以下列的数据框:

    feat      norm    window  type  user_id
----------------------------------------
0 all 0.110000 0 true user1
1 all1 0.232110 0 null user2
2 all2 0.324234 0 true user3
3 all 0.323120 0 null user4
4 all 0.322000 1 true user1
5 all1 0.100000 1 null user1
6 all1 0.200000 1 null user2
7 all2 0.300000 1 true user3

我需要制作一个包含以下内容的结果数据框:

feat      user       result_norm
--------------------------------
all user1_true -0.212
all1 user2_null 0.03211
all2 user3_true 0.0324
all user4_null 0.323120

注意:user4 条目位于输出中,因为其窗口为 0 并且相应的“1”条目不在数据帧中。它与 0 值的减法窗口 0 范数一样好。

即对于每个用户、类型和功能,我需要减去规范并创建一个新的数据框。我们通过减去得到上面显示的结果表(user1,true,all,0) 范数与 (user1,true,all,1) 范数。基本上每个用户、每个类型、每个专长都会在窗口之间获得规范的差异。不必所有用户、类型、专长组合都有其相反的窗口条目来减去,在这种情况下,如果窗口为 0,我们将行复制到输出数据帧,否则丢弃它。

我目前已经通过以下方式实现:

data = data.groupby(by=['user_id', 'feat', 'type'])

并使用 for 循环迭代每个组,如下所示:

for tuple, group in data:
#perform operations on this group

虽然这个解决方案有效,但它非常慢,因为 groupby 是昂贵的操作。我的数据框包含大约 9000000 个条目。有什么办法可以改善这个问题吗?

最佳答案

如果需要用 1 窗口减去 0 窗口,请使用 set_index + unstack先然后sub :

 data = data.set_index(['user_id', 'feat', 'type', 'window'])['norm'].unstack().fillna({1:0})

print (data)
window 0 1
user_id feat type
user1 all true 0.110000 0.322
all1 null NaN 0.100
user2 all1 null 0.232110 0.200
user3 all2 true 0.324234 0.300
user4 all null 0.323120 0.000

df = data[0].sub(data[1]).reset_index(name='result_norm')
print (df)
user_id feat type result_norm
0 user1 all true -0.212000
1 user1 all1 null NaN
2 user2 all1 null 0.032110
3 user3 all2 true 0.024234
4 user4 all null 0.323120

关于python - 解析 pandas 数据帧的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47068935/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com