gpt4 book ai didi

python - pandas 列与其索引 groupby 的乘积

转载 作者:行者123 更新时间:2023-12-01 09:03:25 25 4
gpt4 key购买 nike

我正在使用数据框,并且必须进行分组才能对我的数据进行一些操作。

这是我的数据框的示例:

 I  SI   deltas

1 10 0.1
1 14 0.1
2 10 0.1
2 18 0.3
1 17 0.05
2 30 0.3
1 10 0.4
1 14 0.2
2 10 0.1
2 18 0.2
1 17 0.15

现在,对于每个 I,我以这种方式计算 SI 的相对频率:

results = df.groupby(['I', 'SI'])[['deltas']].sum()
#for each I, we sum all the weights (Deltas)
denom = results.groupby('I')['deltas'].sum()
#for each I, we divide each deltas by the sum, getting them normalized to one
results.deltas = results.deltas / denom

所以我的数据框现在看起来像这样:

我=1

             deltas 

SI = 10 0.5
SI = 14 0.3
SI = 17 0.2

我=2

             deltas 

SI = 10 0.2
SI = 18 0.5
SI = 30 0.3

...

我需要做的是打印每个 I 的增量总和乘以它们的相对 SI:

     I = 1       sum =    0.5 * 10 + 0.3*14 + 0.2*17 = 12.6 
I = 2 sum = 0.2*10 + 18*0.5 + 30*0.3 = 21

但由于现在我正在使用索引为 I 和 SI 的数据框,我不知道如何使用它们。我尝试了这段代码:

     for idx2, j in enumerate(results.index.get_level_values(0).unique()):
#print results.loc[j]
f.write("%d\t"%(j)+results.loc[j].to_string(index=False)+'\n')

但我不确定应该如何继续获取索引值

最佳答案

假设您在初始转换后有一个输入数据帧 df。如果 SI 是您的索引,请通过 df = df.reset_index() 将其提升为列作为初始步骤。

   I  SI  weight
0 1 10 0.5
1 1 14 0.3
2 1 17 0.2
3 2 10 0.2
4 2 18 0.5
5 2 30 0.3

然后您可以计算SIweight的乘积,然后使用GroupBy + sum:

res = df.assign(prod=df['SI']*df['weight'])\
.groupby('I')['prod'].sum().reset_index()

print(res)

I prod
0 1 12.6
1 2 20.0

对于孤立的单个数据帧,您可以使用 np.dot为点积。

s = pd.Series([0.5, 0.3, 0.2], index=[10, 14, 17])
s.index.name = 'SI'

res = np.dot(s.index, s) # 12.6

关于python - pandas 列与其索引 groupby 的乘积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52273761/

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