Я работаю с фреймом данных, и мне пришлось группировать, чтобы выполнить некоторые операции с моими данными.
Это пример моего Dataframe:
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
Итак, мой Dataframe теперь выглядит так:
I = 1
deltas
SI = 10 0.5
SI = 14 0.3
SI = 17 0.2
I = 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')
, но я не уверен, как мне поступить, чтобы получить значения индексов