我有一个数据集,如下:
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来完成。我目前正在使用这种包含数千行(大约)的数据集。任何线索将不胜感激。
我在其他链接上看到了条件和,但找不到解决此类问题的方法。
答案 0 :(得分:1)
将boolean indexing
或query
用于选择列和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