我正在比较新旧的数据收集技术。我需要对一列求和,同时保持其他列不变。我的数据帧如下所示:
new old
apples 25 11
pears 12 4
apples 25 5
apples 25 8
bananas 5 1
pears 12 9
bananas 5 5新的数据收集技术总是会产生正确的答案,但旧的数据收集技术会根据使用的技术产生不同的答案。我不想触及新技术的价值,我想总结一下旧技术的价值,留给我的是:
new old
apples 25 24
pears 12 13
bananas 5 6我非常确定groupby是我的朋友,但不知道如何填充新列。
发布于 2017-08-23 00:05:54
你是对的,groupby是你的朋友。试着这样做:
df.groupby('new').old.sum().reset_index()
new old
0 5 6
1 12 13
2 25 24请注意,您将丢失原始数据帧的索引。
如果您想保留索引,可以执行以下操作:
my_df = my_df.reset_index().groupby('index').agg({'new':'first','old':'sum'})
del my_df.index.name
old new
apples 24 25
bananas 10 5
pears 9 12如果你不关心你的原始索引,我建议你使用前者,因为它更有效:
%timeit my_df.groupby('new').old.sum().reset_index()
817 µs ± 2.22 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit my_df.reset_index().groupby('index').agg({'new':'first','old':'sum'})
1.33 ms ± 1.02 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)https://stackoverflow.com/questions/45822330
复制相似问题