如何用唯一的键和序列值唯一地求和

时间:2019-05-15 20:10:26

标签: pandas group-by analysis

这是我的数据框,如下所示:

df = pd.DataFrame({
        'shipment_name':['A','A','A','A','A','B','B','B','B','B','B', 'C','C','C','C','C'],
        'city_name':[2,3,4,5,6,1,2,3,4,5,6,5,6,7,8,9],
        'volume':[46,46,46,46,46,50,50,50,50,50,50,55,55,55,55,55],
        'customer_name':['James','James','James','James','James','James','James','James','James','James','James','James','James','James','James','James']
    })

我想要一个能给我答案的代码,其值如下: 在城市2-3之间,总流量为(46 + 50 = 96),在城市5-6之间的总流量为(46 + 50 + 55 = 151)。对于名为James的客户,他的发货量在5到6之间为151,在2到3之间为96。

我不知道如何编码。

我不知道如何编码。强文本

1 个答案:

答案 0 :(得分:0)

请带上SO tour并了解How to Ask。这些将帮助您更快地收集有用的回复。

IIUC,此代码应有助于您提出问题:

import pandas as pd
df = pd.DataFrame({
        'shipment_name':['A','A','A','A','A','B','B','B','B','B','B', 'C','C','C','C','C'],
        'city_name':[2,3,4,5,6,1,2,3,4,5,6,5,6,7,8,9],
        'volume':[46,46,46,46,46,50,50,50,50,50,50,55,55,55,55,55],
        'customer_name':['James','James','James','James','James','James','James','James','James','James','James','James','James','James','James','James']
    })
u = df.groupby(['city_name']).sum()

给你

           volume
city_name        
1              50
2              96
3              96
4              96
5             151
6             151
7              55
8              55
9              55

然后您可以按照this answer中的步骤创建组合。我在下面做了一些简单的组合:

u = pd.DataFrame(np.abs(np.subtract.outer(u.volume, u.volume)), u.city_name, u.city_name)
stacked = u.stack()
stacked = pd.DataFrame({'cities': stacked.index.to_series(), 'diff': stacked})[['cities', 'diff']].reset_index(drop=True)

请阅读.groupby()文档here