如何在不迭代pandas datframe中的列的基础上对另一列的条件求和

时间:2019-08-29 06:19:44

标签: pandas dataframe sum

我的数据框如下:

    Preg  Glucose  BloodPressure  SkinThickness  Insulin  Outcome  
0    1.0     85.0           66.0           29.0      0.0    0.0   
1    8.0    183.0           64.0            0.0      0.0    0.0   
2    1.0     89.0           66.0           23.0     94.0    1.0   
3    0.0    137.0           40.0           35.0    168.0    1.0   
4    5.0    116.0           74.0            0.0      0.0    1.0

我想以一种pythonic的方式根据各列之一的条件将各列分开求和。我可以通过遍历df列来做到这一点,但是我敢肯定,还有一种我不熟悉的更好的方法。

对于我拥有的数据,如果最后一列的“结果”等于1,我想对每列值求和。最后,我应该得到以下内容:

    Preg   Glucose BloodPressure  SkinThickness  Insulin  Outcome  
0    6.0     342.0         180.0           58.0    262.0    0.0   

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

以下是获得预期输出的解决方案:

sum_df = df.loc[df.Outcome == 1.0].sum().to_frame().T
sum_df.Outcome = 0.0

输出:

   Preg  Glucose  BloodPressure  SkinThickness  Insulin  Outcome
0   6.0    342.0          180.0           58.0    262.0      0.0
  

文档:

     
      
  • loc:通过标签或布尔数组访问一组行/列
  •   
  • sum:默认情况下,对所有列求和,并返回按列索引的系列。
  •   
  • to_frame:将系列转换为DataFrame。
  •   
  • .T:访问转置函数,转置DataFrame。
  •   

答案 1 :(得分:1)

使用np.where

df1[np.where(df1['Outcome'] == 1,True,False)].sum().to_frame().T

输出

  Preg  Glucose  BloodPressure  SkinThickness  Insulin  Outcome
0   6.0    342.0          180.0           58.0    262.0      3.0

答案 2 :(得分:0)

这些对您有用吗?

df1.loc[~(df1['Outcome'] == 0)].groupby('Outcome').agg('sum').reset_index()

df1.loc[df1.Outcome == 1.0].sum().to_frame().T