各组内按销售数量(或百分比)做降序。这里的排序有两个层次的含义,第一种是组内实际顺序不变,只给一个排序编号。代码如下所示,method=first是保证序号是连续且唯一的。...其中累计到第二行的时候已经达到了61.1%,超过了50%,因此最终只需取前两行即可。 5.目标筛选 经过了前面的数据准备,在这一步需要在每组内,筛选累计值达到50%的行,且最多三行。...可以看出,该组内最初有5行数据,筛选后剩下两行,且销售量占比超过50%,至此需求已基本实现。...6.分组拼接 在上一步筛选出了目标行,未达到最终目标,还需将每个分组内所有符合条件的产品名称拼接起来,并用逗号隔开。这里采用分组对字符串求和的方式来实现。...涉及到的操作依次有:数据读取,列名修改,字段分割,列子集筛选;分组求和(transform);分组排序(编号),分组排序;累计求和;按行迭代,数据拼接,条件筛选,分组拼接,apply/lambda函数;
dropna() 删除NaN 值 可以通过 dropna 方法,默认按行扫描(操作),会将每一行有NaN 值的那一行删除,同时默认是对原对象的副本操作,不会对原对象产生影响,也可以通过inplace 指示是否直接在原对象上操作...df.fillna(0,inplace = True) # inplace 指明在原对象上直接修改 复杂的 使用向前 或 向后 填充数据,依旧使用fillna 方法,所谓向前 是指 取出现NaN值的前一列或前一行的数据来填充...x) 对dataframe 使用apply # 对df 使用apply,都是按行或按列操作,不能保证对每一个元素进行操作 df = pd.DataFrame(val, index=idx, columns...=col) # 按行操作,对数据求和 print(type(df.apply(lambda col: col.sum(), axis='rows'))) # 按列操作,对数据求和 print(df.apply...:", n, "\n|",g,"|" # 查看组名和 每组的数据信息 for n,_ in dg: print "group_name:", n, "\n|",dg.get_group(n),
A4:按照月份m进行排序 A5:新增一列,如果月份等于前一行的月份,则计算增长比并赋值,否则赋值null,将该列命名为yoy。...A4:按照STOCKID和DATE分组,同时对各组进行计算,if(x,true,false),这里是如果INDICATOR==ISSUE,if()函数等于QUANTITY的值,否则为0,将此结果在该组中求和后添加到字段...ISSUE,如果INDICATOR==ISSUE,if()函数等于0,否则为QUANTITY的值,将此结果在该组中求和后添加到字段ENTER。...取到STOCKID,DATE,ENTER,ISSUE四个字段,并按照STOCKID,DATE进行分组,同时对各组求和,得到每一天每种货物的出入库记录。...python pandas的dataframe结构是按列进行存储的,按行循环时就显得特别麻烦。
head():认获取前 5 行 head(n):获取前 n 行 tail():默认获取后 5 行 tail(n):获取后 n 行 sample(n):随机抽取 n 行显示 df.head(10) (三)...对 DataFrame df2中的每一行,从 ‘Q1’ 到 ‘Q4’ 列的值进行求和: df2.apply(lambda x:sum(x['Q1':'Q4']),axis=1) # 一次处理一行 使用了...其中lambda x: sum(x['Q1':'Q4'])表示对每一行从 ‘Q1’ 到 ‘Q4’ 列进行求和操作。而axis=1参数指定了按行操作。...因此,该代码将会对 DataFrame df2中的每一行,从 ‘Q1’ 到 ‘Q4’ 列的值进行求和,并返回一个包含每一行求和结果的 Series。...,然后对每个分组中的 ‘Q1’ 和 ‘Q4’ 列应用了max()函数,以找到每个组中 ‘Q1’ 和 ‘Q4’ 列的最大值。
,行进行求和, axis=0(默认为) print('行求和:\n',df.sum()) print('列求和:\n',df.sum(1)) # 列求和 print('均值:\n',df.mean())...求最大值 print('最小值:\n',df.max()) # 求最小值 """ 运行结果: 行求和: Age 382 Name AIBICIDIEIFIGIHIIIJIKILI...二、pandas迭代数据 对Pandas对象进行基本迭代的行为取决于类型。在遍历一个Series时,它被视为类似数组,并且基本迭代产生这些值。...默认情况下,按行标签按升序排序。...默认情况下,axis = 0,按行排序。
获取指定的列和行 import pandas as pd df = pd.read_csv('xxxx.xls') 获取行操作df.loc[3:6]获取列操作df['rowname']取两列df[['...()重设索引df=df.set_index(‘date’)设置 date 为索引df[:‘2013’]提取 2013 之前的所有数据df.iloc[:3,:2]从 0 位置开始,前三行,前两列,这里的数据不同去是索引的标签名称...,而是数据所有的位置df.iloc[[0,2,5],[4,5]]提取第 0、2、5 行,第 4、5 列的数据df.ix[:‘2013’,:4]提取 2013 之前,前四列数据df[‘city’].isin...,并生成数据表 数据筛选 使用与、或、非三个条件配合大于、小于、等于对数据进行筛选,并进行计数和求和。...'age']].sort( ['id']).city.count() 使用 query 函数进行筛选 df.query('city' == ['beijing', 'shanghai']) 对筛选后的结果按
利用pandas来进行数据处理的方法太多了,在这里继续更新一下对缺失数据的处理,以及数据的分组,聚合函数的使用。...正向填充和前向填充: 对每一条数据的缺失值,填充其上下条数据的值。...) # 填充前一条数据的值,但是前一条也不一定有值 print(df.fillna(method='pad'), '\n') # 填充后一条数据的值,但是后一条也不一定有值 print(df.fillna...: print(df.groupby('Rank'),'\n') # 分割组 """ 输出: pandas.core.groupby.DataFrameGroupBy object at 0x7f54f9e6a6d8...> """ 输出的是一个pandas对象 查看组: print(df.groupby('Rank').groups,'\n') # 查看组 """ 输出: {1: Int64Index([0, 6
Pandas库 Pandas数据结构 1、Series (1)概念: Series是一种类似于一维数组的对象,它由一组数据以及一组与之相关的数据标签(即索引)组成。...当我们没有为数据指定索引时,Series会自动创建一个0到N-1(N为数据的长度)的整数型索引。可以通过Series的values和index属性获取其数组的值和对应的属性。...(3)获取DataFrame的值(行或列) 通过查找columns值获取对应的列。(下面两种方法) 通过索引字段ix查找相应的行。 (4)对列进行赋值处理。 对某一列可以赋一个标量值也可以是一组值。...Pandas基本功能 1、重新索引 Pandas对象的一个方法就是重新索引(reindex),其作用是创建一个新的索引,pandas对象将按这个新索引进行排序。对于不存在的索引值,引入缺失值。...其中有求和(sum)运算、累计(cumsum)运算、平均值(mean)等运算。这些运算默认都是针对于行的运算,通过使用axis=1进行列的运算。
如果你对pandas的学习很感兴趣,你可以参考我们的pandas教程指导博客(http://www.dataquest.io/blog/pandas-python-tutorial/),里面包含两大部分的内容...数据框的前n行 df.tail(n) 数据框的后n行 df.shape() 行数和列数 df.info() 索引,数据类型和内存信息 df.describe() 数值列的汇总统计信息 s.value_counts...df[(df[col] > 0.5) & (1.7)] 0.7> col> 0.5的行 df.sort_values(col1) 将col1按升序对值排序 df.sort_values(col2,ascending...=False) 将col2按降序对值排序 df.sort_values([col1,ascending=[True,False]) 将col1按升序排序,然后按降序排序col2 df.groupby(col...) 从一列返回一组对象的值 df.groupby([col1,col2]) 从多列返回一组对象的值 df.groupby(col1)[col2] 返回col2中的值的平均值,按col1中的值分组(平均值可以用统计部分中的几乎任何函数替换
1、首先导入pandas库,一般都会用到numpy库,所以我们先导入备用: import numpy as np import pandas as pd 2、导入CSV或者xlsx文件: df = pd.DataFrame...行数据、后5行数据: df.head() #默认前5行数据 df.tail() #默认后5行数据 三、数据表清洗 1、用数字0填充空值: df.fillna(value=0) 2、使用列prince...[:3,:2] #冒号前后的数字不再是索引的标签名称,而是数据所在的位置,从0开始,前三行,前两列。...7、适应iloc按位置单独提起数据 df_inner.iloc[[0,2,5],[4,5]] #提取第0、2、5行,4、5列 8、使用ix按索引标签和位置混合提取数据 df_inner.ix[:'2013...1、对所有的列进行计数汇总 df_inner.groupby('city').count() 2、按城市对id字段进行计数 df_inner.groupby('city')['id'].count()
rank打破平级常用方法 方法 描述 'average' 默认:每个组分配平均排名 'min' 对整个组使用最小排名 'max' 对整个组使用最大排名 'first' 按照值在数据中的出现次序排名 'dense...' 类似method='min',但是组间排名总是增加1,而不是一个组中相等的元素数量 大家可以下面自己练习。...下面是对一个DataFrame的一个示例: import pandas as pd import numpy as np frame = pd.DataFrame([[2, np.nan], [7, -...:\n', frame.sum()) print('行上求和:\n', frame.sum(axis = 1)) print('行上求均值:\n', frame.mean(axis = 1, skipna...0.5 -2.0 列上求和: one 9.5 two -5.0 dtype: float64 行上求和: a 2.0 b 4.0 c 0.0 d -1.5 dtype:
其中,Series 和 DataFrame 是 Pandas 中最常用的两个对象,分别对应于一维和二维数据的处理(Pandas 还有对三维甚至多维数据处理的 Panel 对象,但不太常用)。...8、对dff中的交易额平均值进行降序排列 dff.sort_values(ascending=False) 9、使用df中的数据按类别统计每个人的交易总额 df.pivot_table(index='姓名...在这个例子中,使用的聚合函数是'sum',表示对 “交易额” 进行求和。...然后,使用.sum()方法两次对这个布尔值的 DataFrame 进行求和,第一次对每列求和,第二次对每行的结果再求和。...最后,使用groupby方法将合并后的 DataFrame 按照 “姓名” 和 “职级” 进行分组,并计算每个组中 “交易额” 列的总和。
条数据 三、重复值、缺失值、异常值处理、按行、按列剔除 1.重复值统计、剔除: import pandas as pd sheet1 = pd.read_csv(filepath_or_buffer...)、1(对列数据进行剔除),默认为0 how:any(行中有任意一个空值则剔除), all(行中全部为空值则剔除) inplace:是否在该对象进行修改 import pandas as pd sheet1...0: sheet1.drop(index=index, inplace=True) print("异常值处理后:") print(sheet1['Age'].head(5)) 4.按行...、按列剔除 import pandas as pd sheet1 = pd.read_csv(filepath_or_buffer='long-customer-train.csv', sep=','...', skiprows=0, usecols=None) sheet1 = sheet1.iloc[0:4, 1:3] # 提取前5行, 1、2、3 列 4.loc常用示例 import pandas
,逗号前选择行,逗号后选择列。...关键技术: 二维数组索引语法总结如下: [对行进行切片,对列的切片] 对行的切片:可以有start:stop:step 对列的切片:可以有start:stop:step import pandas...关键技术:对于例子给定的DataFrame数据,按行进行求和并输出结果。...可以采用求和函数sum(),设置参数axis为0,则表示按纵轴元素求和,设置参数axis为1,则表示按横轴元素求和,程序代码如下所示: 均值运算 在Python中通过调用DataFrame对象的mean...关键技术: mean()函数能够对对数据的元素求算术平均值并返回,程序代码如下所示: 中位数运算 中位数又叫作中值,按顺序排列的一组数据中位于中间位置的数,其不受异常值的影响。
如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引。 columns:列标签。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引。...填入参数N则显示前N行 data.head(5) 结果: (7)tail(5):显示后5行内容 如果不补充参数,默认5行。...填入参数N则显示后N行 data.tail(5) 结果: (3)DatatFrame索引的设置 现在要将下图的行索引改变,变成下下图所示样子,怎么做呢?...以上这些函数可以对series和dataframe操作,这里我们按照时间的从前往后来进行累计 排序 # 排序之后,进行累计求和 data = data.sort_index() 对p_change进行求和...8.2 pd.merge pd.merge(left, right, how='inner', on=None) 可以指定按照两组数据的共同键值对合并或者左右各自 left: DataFrame right
print(data2.dtypes) Out: col1 int64 col2 object col3 bool dtype: objectt结果是Series类型head查看前N...条结果In: print(data2.head(2)) Out: col1 col2 col3 0 2 a True 1 1 b True从第一行开始取前2行...2 1 1选取行索引在[0:2)列索引在[0:1)中间的记录,行索引不包含2,列索引不包含1loc[m:n,[ '列名1', '列名2',…]]选择行索引在m到n间且列名为列名1、列名2的记录...data1和data2,可通过指定axis=0按行合并append按行追加数据框In: print(data1.append(data2)) Out: col1 col2 col3 col4...,'col3':np.mean})) Out: col1 col3 col2 a 2 0.5 b 1 1.0在data2中以col2为维度,对col1求和,col3
如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引。 columns:列标签。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引。...填入参数N则显示前N行 data.head(5) 结果: (7)tail(5):显示后5行内容 如果不补充参数,默认5行。...填入参数N则显示后N行 data.tail(5) 结果: 3、DatatFrame索引的设置 现在要将下图的行索引改变,变成下下图所示样子,怎么做呢?...以上这些函数可以对series和dataframe操作,这里我们按照时间的从前往后来进行累计 排序 # 排序之后,进行累计求和 data = data.sort_index() 对p_change进行求和...8.2 pd.merge pd.merge(left, right, how='inner', on=None) 可以指定按照两组数据的共同键值对合并或者左右各自 left: DataFrame right
1、NumExpr NumExpr 是一个对NumPy计算式进行的性能优化。...4.1 按行迭代优化 我们按行对dataframe进行迭代,一般我们会用iterrows这个函数。...4.5 pandas.eval pandas.eval 是基于第一节提到的numexpr,pandas也是基于numpy开发的,numexpr同样可以被用来对pandas加速)。...使用eval表达式的一个经验是数据超过 10,000 行的情况下使用会有明显优化效果。...或者ray(dask是类似pandas库的功能,可以实现并行读取运行),是个支持分布式运行的类pandas库,简单通过更改一行代码import modin.pandas as pd就可以优化 pandas
领取专属 10元无门槛券
手把手带您无忧上云