gpt4 book ai didi

python - 使用两个或多个索引循环数据帧

转载 作者:行者123 更新时间:2023-11-28 22:21:24 24 4
gpt4 key购买 nike

我有一个看起来像这样的 Pandas 数据框:

Location    Test#       Type        Parm1   Weight
M36 Test1 A 1.39 233
Test2 B 1.44 281
Test3 B 1.40 239
Test4 A 1.49 438
Test5 C 0.99 112
Test6 C 1.74 200
Test7 A 1.17 100
Test8 A 2.40 7.8
M37 Test1 B 2.91 232
Test2 A 20.2 0
Test3 C 4.88 958
Test4 A 9.46 0

我想计算每个位置的加权平均值,并将其作为额外列添加到数据框中,应该如下所示:

Location    Test#       Type        Parm1   Weight  Weighted Ave.
M36 Test1 A 1.39 233 1.434
Test2 B 1.44 281
Test3 B 1.40 239
Test4 A 1.49 438
Test5 C 0.99 112
Test6 C 1.74 200
Test7 A 1.17 100
Test8 A 2.40 7.8
M37 Test1 B 2.91 232 4.495
Test2 A 20.2 0
Test3 C 4.88 958
Test4 A 9.46 0

最佳答案

有很多方法可以做到这一点,使用 groupby。这应该是执行此操作的更高效的方法之一。

df.set_index('Location', inplace=True)                # set the index

df['Weighted_Sum'] = (df.Parm1 * df.Weight) # calculated weighted sum
v = df[['Weighted_Sum', 'Weight']].sum(level=0) # groupby + sum

df['Weighted Ave'] = v['Weighted_Sum'] / v['Weight'] # calculate the mean
del df['Weighted_Sum'] # drop the surrogate column

df

Test# Type Parm1 Weight Weighted Ave
Location
M36 Test1 A 1.39 233.0 1.434275
M36 Test2 B 1.44 281.0 1.434275
M36 Test3 B 1.40 239.0 1.434275
M36 Test4 A 1.49 438.0 1.434275
M36 Test5 C 0.99 112.0 1.434275
M36 Test6 C 1.74 200.0 1.434275
M36 Test7 A 1.17 100.0 1.434275
M36 Test8 A 2.40 7.8 1.434275
M37 Test1 B 2.91 232.0 4.495933
M37 Test2 A 20.20 0.0 4.495933
M37 Test3 C 4.88 958.0 4.495933
M37 Test4 A 9.46 0.0 4.495933

要获取格式中的 Weighted Ave 列,请使用 mask -

df['Weighted Ave'] = df['Weighted Ave'].mask(df['Weighted Ave'].duplicated(), '')

关于python - 使用两个或多个索引循环数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48351575/

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