熊猫:只在一列中汇总选定的值

时间:2018-06-25 13:09:40

标签: python pandas sum

我有一个数据集,如下:

    Data   Quantity   Price  
0   P1     1          5   
1   P2     1          7
2   P3     2          3
3   P4     1          3
4   Total  5          18

我只想对上述数据框中的P1,P2和P3求和,而不对P4和Total求和。这可以通过多行代码来完成,但是如何使用pandas.DataFrame.sum来完成。我目前正在使用这种包含数千行(大约)的数据集。任何线索将不胜感激。

我在其他链接上看到了条件和,但找不到解决此类问题的方法。

2 个答案:

答案 0 :(得分:1)

boolean indexingquery用于选择列和sum

s = df.loc[df['Data'].isin(['P1','P2','P3']), ['Quantity','Price']].sum()

或者:

s = df.query('Data == ["P1", "P2", "P3"]')[['Quantity','Price']].sum()

print (s)
Quantity     4
Price       15
dtype: int64

答案 1 :(得分:0)

如果要选择的列(如P1,P2和P3)的数量大于未选择的列,那么编写以上内容将是多行任务(对于要选择的数百列和几乎可以忽略不计的列数)。正确的方法是:

(待选择的列数)>>(待选择的列数)

s = df1.loc[~df1['Data'].isin(['Total','P4']),['Quantity','Price']].sum()
print (s)

使用以下代码,将名为“总计”的行添加到数据帧的末尾

df1.loc['Total_without_P4'] = pd.Series(df1.loc[~df1['Data'].isin(['Total','P4']),['Quantity','Price']].sum() , index=['Quantity','Price'])

输出为:

                    Data   Quantity   Price  
0                   P1     1          5   
1                   P2     1          7
2                   P3     2          3
3                   P4     1          3
4                   Total  5          18
Total_without_P4           4          15