【发布时间】:2015-04-21 20:49:26
【问题描述】:
我无法拆分我的数据框、应用计算并将其重新组合在一起。
这是我的数据框的样子:
Priority ID Name Coverage Group
1 1000 Name 1 33 Group A
2 1001 Name 2 67 Group A
3 1002 Name 3 100 Group A
4 1003 Name 4 33 Group B
5 1004 Name 5 67 Group B
6 1005 Name 6 100 Group B
7 1006 Name 7 33 Group C
8 1007 Name 8 67 Group C
9 1008 Name 9 100 Group C
我正在尝试创建一个新的“有效覆盖率”列,因为我当前的“覆盖率”列对于每个“组”都是累积的。例如,作为“A 组”一部分的“名称 3”实际上覆盖了 33 (100 - 67)。
我希望达到的最终结果是:
Priority ID Name Coverage Group Effective Coverage
1 1000 Name 1 33 Group A 33
2 1001 Name 2 67 Group A 34
3 1002 Name 3 100 Group A 33
4 1003 Name 4 33 Group B 33
5 1004 Name 5 67 Group B 34
6 1005 Name 6 100 Group B 33
7 1006 Name 7 33 Group C 33
8 1007 Name 8 67 Group C 34
9 1008 Name 9 100 Group C 33
这是我目前所拥有的:
for group in groups:
effective_coverage = [df[df['group']==group].coverage.iloc[0]]
for i in range(1,len(df[df['group']==group].placementID)):
ecov = df[df['group']==group].coverage.iloc[i] - df[df['group']==group].coverage.iloc[i-1]
effective_coverage.append(ecov)
effective_coverage = pd.Series(effective_coverage, name='effective_coverage')
print effective_coverage
df[df['group']==group] = df[df['group']==group].join(effective_coverage)
print df[df['group']==group]
我知道计算有效覆盖率的逻辑是正确的,因为对于每个组,它都会打印出正确的有效覆盖率 33、34、33。
但是,当我尝试加入有效覆盖系列并打印出其中一个组的数据框时,它只会返回:
Priority ID Name Coverage Group
1 1000 Name 1 33 Group A
2 1001 Name 2 67 Group A
3 1002 Name 3 100 Group A
并且没有成功加入我新计算的有效覆盖范围。
这里有什么想法吗?我是一个 Python 大菜鸟,所以如果有人有的话,我很想听听更优雅的方法来实现这一点。
【问题讨论】:
标签: python python-2.7 pandas dataframe