熊猫groupby和sum

时间:2019-11-13 16:34:55

标签: python pandas

我有一个熊猫数据框,它由三列A,B,C组成,我需要根据行值求和

下面是场景

A            B               C

Distance_a  distance_b       5
Distance_a  distance_c       6

distance_b  distance_c       7

distance_b  distance_d       7

distance_d  Distance_a       9

如果我想找出与distance_A的累计距离,则需要我的代码添加5,6,并且还应该考虑最后一列,即distance_d Distance _a,它也需要加9。

因此与a的累计距离将为5 + 6 + 9 = 20

3 个答案:

答案 0 :(得分:1)

@Hongpei的回答当然更有效,但是如果您只想要distance_a的总和。您也可以执行以下操作

import pandas as pd

# initialize list of lists
data = {'A':['distance_a', 'distance_a', 'distance_b', 'distance_b', 'distance_d'],
        'B':['distance_b', 'distance_c', 'distance_c', 'distance_d', 'distance_a'],
        'C':[5, 6, 7, 7, 9]}

# Create the pandas DataFrame
df = pd.DataFrame(data)

# Group by columns A and B individually
col_A_groupby = df.groupby(['A']).sum()
col_B_groupby = df.groupby(['B']).sum()

# Sum the values together
dist_a_sum = col_A_groupby.loc['distance_a'] + col_B_groupby.loc['distance_a']

答案 1 :(得分:0)

有一个简单的解决方法,假设您原来的DataFrame是df,那么您只需要:

pd.concat([df[['A','C']],
           df[['B','C']].rename(columns={'B':'A'})],
          sort=False).groupby('A').sum()

基本上,我要做的是将df [[''A','C']]和df [['B','C']]组合在一起(同时将第二个df列重命名为['A',' C']),然后再分组

答案 2 :(得分:0)

IIUC,meltsum就足够了

s = df.melt('C').groupby('value').C.sum()
print(s)

Out[113]:
value
Distance_a    20
distance_b    19
distance_c    13
distance_d    16
Name: C, dtype: int64