对特定行求和,同时忽略一列

时间:2017-08-22 16:00:24

标签: pandas

我比较了新旧数据收集技术。我需要总结一列,同时保持其他列不受影响。我的数据框看起来像这样:

          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是我的朋友,但无法确定如何填充新列。

1 个答案:

答案 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)