【发布时间】:2019-02-14 00:55:17
【问题描述】:
我有一个看起来像这样的 pandas 数据框:
**I SI weights**
1 3 0.3
2 4 0.2
1 3 0.5
1 5 0.5
我需要这样做:给定一个 I 值,考虑每个 SI 值并添加总重量。最后,对于每个实现,我应该有类似的东西:
I = 1 SI = 3 weight = 0.8
SI = 5 weight = 0.5
I = 2 SI = 4 weight = 0.2
这很容易通过调用 groupby 和 sum 来实现:
name = ['I', 'SI','weight']
Location = 'Simulationsdata/prova.csv'
df = pd.read_csv(Location, names = name,sep='\t',encoding='latin1')
results = df.groupby(['I', 'real', 'SI']).weight.sum()
现在我希望将权重归一化为 1,这样它应该是这样的:
I = 1 SI = 3 weight = 0.615
SI = 5 weight = 0.385
I = 2 SI = 4 weight = 1
我试过了:
for idx2, j in enumerate(results.index.get_level_values(1).unique()):
norm = [float(i)/sum(results.loc[j]) for i in results.loc[j]]
但是当我尝试为每个 I 绘制 SI 的分布时,我发现 SI 也被归一化,我不希望这种情况发生。
附:这个问题与this one有关,但由于涉及到问题的另一个方面,我认为最好单独问一下
【问题讨论】:
标签: pandas plot normalization pandas-groupby