首页 > 解决方案 > python pandas按列分组,统计其对应列的累计值

问题描述

今天我不得不用python处理一些问题。

根据销售区域分组,累计对应出货量,对出货结果进行四舍五入。大区的值为NULL或空,希望跳过统计。输出的csv文件需要有大面积+销售面积+出货量+留言

在此处输入图像描述

Id, Message, region, shipping volume, sales area
1, natural, AAA, 25.02, 111
2, Nature, BBB, 63.22, 222
3, China, CCC, 554.21, 333
4, yes, AAA, 63.22, NULL
5, large, NULL, 645.55, 222
6, DAD ,,, 333
7, large, BBB, 69.22, 222
8, NULL, DDD, NULL, 444

我确实尝试过:

在此处输入图像描述

结果:

在此处输入图像描述

import pandas as pd
import csv
import math
  
df = pd.read \ _csv (r'G: \\ 360MoveData \\ Users \\ Hasee \\ Desktop \\ Business List.csv ')
  
 #Discard missing values
 # df = df.dropna (axis = 0, subset = \ ["Sales Area", "erp average daily shipment amount" \])
  
for i in range (len (df)):
  if (df \ ['Sales Area' \] \ [i \] == '' or df \ ['Sales Area' \] \ [i \] == "NULL"):
   df = df.drop (i)
  
 #Rounded up  
  
 #df \ _sum = df.groupby ('Sales Area'). agg ({"Shipping Volume": sum}). reset \ _index ()
df \ _sum = df.groupby ("Sales Area"). agg ({"Shipping Volume": sum})
  
 #df \ _sum = df.insert (3, "Area name", df \ _sum ('Area'))
  
df \ _sum.to \ _csv (r'G: \\ 360MoveData \\ Users \\ Hasee \\ Desktop \\ Count1.csv ')

问题: 1. 不知道如何添加区列表。2.我想用math.ceil()对销售区域和manifest的值进行四舍五入,不知道怎么加。3、第一行是0.0,应该是NULL值和空值引起的,如何避免。

标签: pythonpandasdataframe

解决方案


使用groupby如下

1. 通过修剪空白将 csv 读入数据帧。

df = pd.read_csv('/Users/prince/Downloads/test2.csv', sep=',', skipinitialspace=True)

输出是

Id  Message region  shipping volume  sales area
  1  natural    AAA            25.02       111.0
  2   Nature    BBB            63.22       222.0
  3    China    CCC           554.21       333.0
  4      yes    AAA            63.22         NaN
  5    large    NaN           645.55       222.0
  6     DAD     NaN              NaN       333.0
  7    large    BBB            69.22       222.0
  8      NaN    DDD              NaN       444.0

2. 现在删除 NaN 值

df = df.dropna()

输出是

Id  Message region  shipping volume  sales area
  1  natural    AAA            25.02       111.0
  2   Nature    BBB            63.22       222.0
  3    China    CCC           554.21       333.0
  7    large    BBB            69.22       222.0

3.现在做groupby

在你的问题中,你正在做 groupbySales Area

df = df.groupby ("sales area", as_index=False). agg ({"shipping volume": 'sum'})

这将给出输出

sales area  shipping volume
      111.0            25.02
      222.0           132.44
      333.0           554.21

4.如果要包含其他列,aggregate请执行以下操作

df.groupby ("sales area", as_index=False). agg ({"shipping volume": 'sum', 'Message' : 'first', 'region' : 'first'})

这将为您提供以下输出。

sales area  shipping volume  Message region
      111.0            25.02  natural    AAA
      222.0           132.44   Nature    BBB
      333.0           554.21    China    CCC

推荐阅读