我比较了新旧数据收集技术。我需要总结一列,同时保持其他列不受影响。我的数据框看起来像这样:
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是我的朋友,但无法确定如何填充新列。
答案 0 :(得分:0)
你是对的,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)