【问题标题】:Summing values with similar row values对具有相似行值的值求和
【发布时间】:2017-08-03 15:32:23
【问题描述】:

我有一个看起来像这样的 pandas 数据集

city    difference 
NY       6
SF       8
LA       8
NY       9
SF       10

我想根据city 列总结difference 列的值,这样我的最终数据集看起来像

city    difference    total difference
NY       6              15
NY       9
LA       8               8
SF       10             10

我试过了

df['total difference'] = df.groupby('city')['difference'].sum()

但它没有用。我什至尝试了How to sum values of particular rows in pandas?,但得到了NaN 新列的值。请帮忙!

【问题讨论】:

    标签: python pandas data-analysis


    【解决方案1】:

    我觉得你需要transform:

    df['total difference'] = df.groupby('city')['difference'].transform(sum) 
    print (df)
      city  difference  total difference
    0   NY           6                15
    1   SF           8                18
    2   LA           8                 8
    3   NY           9                15
    4   SF          10                18
    

    如果还需要排序列:

    df['total difference'] = df.groupby('city')['difference'].transform('sum') 
    df = df.sort_values('city')
    print (df)
      city  difference  total difference
    2   LA           8                 8
    0   NY           6                15
    3   NY           9                15
    1   SF           8                18
    4   SF          10                18
    

    我对功能和时序的差异很感兴趣:

    #[10000000 rows x 2 columns]
    np.random.seed(100)
    df = pd.DataFrame(np.random.randint(1000, size=(10000000,2)), columns=['city','difference'])
    #print (df)
    
    In [293]: %timeit (df.groupby('city')['difference'].transform('sum'))
    1 loop, best of 3: 570 ms per loop
    
    In [294]: %timeit (df.groupby('city')['difference'].transform(sum))
    1 loop, best of 3: 567 ms per loop
    
    In [295]: %timeit (df.groupby('city')['difference'].transform(np.sum))
    1 loop, best of 3: 561 ms per loop
    

    【讨论】:

    • 这就像魔术一样!请注意,您错误地将“ ”添加到 sum 关键字!非常感谢:)
    • 'sum' 也应该可以工作。您可以通过名称与使用内置函数来引用许多内部函数,例如'sum''min'
    • @jezrael 个人而言,我会将其保留为 'sum',这是普遍接受的,它在内部映射到 np.sum 而不必将 import numpy as np 映射到您的命名空间。
    • @AChampion - 我同意,几个月前我在做计时,'sum'sum 更快。感谢您的评论。但我认为这取决于真实数据、组的大小……我认为如果使用'sum'cal pandas sum 函数,但我不确定sum 中的调用是什么。
    • @BikramBaruah - 如果我的回答有帮助,请不要忘记accept。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2018-09-26
    • 2016-04-07
    • 2020-06-17
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 2018-10-23
    • 2018-08-12
    相关资源
    最近更新 更多