天道酬勤,学无止境

分组和计算频率,Pandas(Grouping and Computing Frequency ,Pandas)

问题

我有一个数据框:

df = pd.DataFrame({'Type' : ['Pokemon', 'Pokemon', 'Bird', 'Pokemon', 'Bird', 'Pokemon', 'Pokemon', 'Bird'],'Name' : ['Jerry', 'Jerry', 'Flappy Bird', 'Mudkip','Pigeon', 'Mudkip', 'Jerry', 'Pigeon']})

我需要将观察结果按其类型分组,即所有口袋妖怪类型及其各自的名称。 我需要添加另一列,该列具有类型中名称的出现频率。 它应该看起来像:

Type         Name     Frequency   
Pokemon      Jerry        3 
             Mudkip       2    

Bird         Pigeon       2  
           Flappy Bird    1  

我用了 :

data2 = df.groupby(['Type']) 

但这并没有按照它需要的方式对其进行分组。
请帮忙。

回答1

我认为您想对“类型”和“名称”进行分组:

print df.groupby(['Type','Name']).size()

Type     Name       
Bird     Flappy Bird    1
         Pigeon         2
Pokemon  Jerry          3
         Mudkip         2

或者,如果将列命名为“频率”很重要,您可以执行以下操作:

print df.groupby(['Type','Name'])['Type'].agg({'Frequency':'count'})

                     Frequency
Type    Name                  
Bird    Flappy Bird          1
        Pigeon               2
Pokemon Jerry                3
        Mudkip               2

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Pandas 进阶
    Pandas 进阶 1.基本数据操作 1. 索引 1. 直接 -- 先烈货航 2. loc 先行后列,只能通过索引值 3. iloc 先行后列,可以通过下标 4. ix 县行后列,混合索引 2. 赋值 3. 排序 1. 索引 data.sort_index() 默认升序排列 2. 值的排序 df.sort_values(by=, ascending=) by:指定排序参考的键,by 可以接收多个值,有限按照第一个索引排序,若值相同比较后边的 ascending:默认升序 ascending=False:降序 ascending=True:升序 4. 运算 1. 算数运算 2. 逻辑运算 逻辑运算函数 对象.query("") 对象.isin([ ]) 3. 统计运算 df.describe() -- 查看dataframe 的统计信息 例如最小,最大,中位,平均 data.idxmax(axis=0) -- 最大值索引 data.idxmin(axis=0) -- 最小值索引 累计统计函数 df.cumsum() 计算前1/2/3/…/n个数的和 df.cummax() 计算前1/2/3/…/n个数的最大值 df.cummin() 计算前1/2/3/…/n个数的最小值 df.cumprod() 计算前1/2/3/…/n个数的积 4. 自定义运算 apply(func, axis)
  • Grouping and Computing Frequency ,Pandas
    I have a dataframe : df = pd.DataFrame({'Type' : ['Pokemon', 'Pokemon', 'Bird', 'Pokemon', 'Bird', 'Pokemon', 'Pokemon', 'Bird'],'Name' : ['Jerry', 'Jerry', 'Flappy Bird', 'Mudkip','Pigeon', 'Mudkip', 'Jerry', 'Pigeon']}) and i need to group the observations w.r.t their types i.e all pokemon types together with their respective names . And i need to add another column which has the frequency of occurrence of the names in the types. It should look like : Type Name Frequency Pokemon Jerry 3 Mudkip 2 Bird Pigeon 2 Flappy Bird 1 I used : data2 = df.groupby(['Type']) but that doesn't group it the
  • 计算大熊猫数量的最有效方法是什么?(what is the most efficient way of counting occurrences in pandas?)
    问题 我有一个大的(约1200万行)数据帧df,说: df.columns = ['word','documents','frequency'] 因此,以下及时运行: word_grouping = df[['word','frequency']].groupby('word') MaxFrequency_perWord = word_grouping[['frequency']].max().reset_index() MaxFrequency_perWord.columns = ['word','MaxFrequency'] 但是,这要花费很长的时间才能运行: Occurrences_of_Words = word_grouping[['word']].count().reset_index() 我在这里做错了什么? 有没有更好的方法来计算大型数据框中的出现次数? df.word.describe() 运行得很好,所以我真的没想到这个Occurrences_of_Words数据框会花很长时间来构建。 ps:如果答案很明显,并且您觉得有必要因提出这个问题而对我不利,请同时提供答案。 谢谢你。 回答1 我认为df['word'].value_counts()应该df['word'].value_counts() 。 通过跳过groupby机制,您可以节省一些时间。
  • 熊猫的频率表(例如R中的plyr)(Frequency tables in pandas (like plyr in R))
    问题 我的问题是如何计算熊猫中多个变量的频率。 我有这个数据框: d1 = pd.DataFrame( {'StudentID': ["x1", "x10", "x2","x3", "x4", "x5", "x6", "x7", "x8", "x9"], 'StudentGender' : ['F', 'M', 'F', 'M', 'F', 'M', 'F', 'M', 'M', 'M'], 'ExamenYear': ['2007','2007','2007','2008','2008','2008','2008','2009','2009','2009'], 'Exam': ['algebra', 'stats', 'bio', 'algebra', 'algebra', 'stats', 'stats', 'algebra', 'bio', 'bio'], 'Participated': ['no','yes','yes','yes','no','yes','yes','yes','yes','yes'], 'Passed': ['no','yes','yes','yes','no','yes','yes','yes','no','yes']}, columns = ['StudentID', 'StudentGender', 'ExamenYear', 'Exam',
  • 计算pandas DataFrame列中值的频率(Count frequency of values in pandas DataFrame column)
    问题 我想计算每个值出现在数据框中的次数。 这是我的数据框df : status 1 N 2 N 3 C 4 N 5 S 6 N 7 N 8 S 9 N 10 N 11 N 12 S 13 N 14 C 15 N 16 N 17 N 18 N 19 S 20 N 我想对字典进行计数: 前任。 counts = {N: 14, C:2, S:4} 我试过了df['status']['N']但它给出了keyError ,也给出了df['status'].value_counts但没有用。 回答1 您可以使用value_counts和to_dict: print df['status'].value_counts() N 14 S 4 C 2 Name: status, dtype: int64 counts = df['status'].value_counts().to_dict() print counts {'S': 4, 'C': 2, 'N': 14} 回答2 另一种使用劣势Counter班轮: In [3]: from collections import Counter In [4]: dict(Counter(df.status)) Out[4]: {'C': 2, 'N': 14, 'S': 4} 回答3 您可以尝试这种方式。 df.stack().value
  • 有关大熊猫的问题:扩展多值列,反转和分组(Questions about pandas: expanding multivalued column, inverting and grouping)
    问题 我一直在研究熊猫,以对NLP和文本挖掘进行一些简单的计算,但是我不太了解如何去做。 假设我有以下数据框,其中涉及人们的姓名和性别: import pandas people = {'name': ['John Doe', 'Mary Poppins', 'Jane Doe', 'John Cusack'], 'gender': ['M', 'F', 'F', 'M']} df = pandas.DataFrame(people) 对于所有行,我想: 确定名字确定由人名衍生的3格(单词中包含3个字母的序列)的列表确定每个带状疱疹在其名字上包含多少个男性和女性。 目标是将其用作训练分类器的数据集,分类器可以确定给定名称可能是男性名称还是女性名称。 前两个操作非常简单: def shingles(word, n = 3): return [word[i:i + n] for i in range(len(word) - n + 1)] df['firstname'] = df.name.map(lambda x : x.split()[0]) df['shingles'] = df.firstname.map(shingles) 结果是: > print df gender name firstname shingles 0 M John Doe John ['joh', 'ohn
  • 利用python进行数据分析学习笔记
    利用python进行数据分析 numpy:数组与向量化计算pandaspandas读取和写入数据集及文件格式数据清洗与准备数据规整:连接、联合和重排列绘图与可视化数据聚合与分组操作时间序列高阶pandasPython建模库介绍高阶numpy 本篇是《利用python进行数据分析》的学习笔记。 numpy:数组与向量化计算 ndarray,一种高效多维数组,提供了基于数组的便捷算术操作以及灵活的广播功能。对所有数据进行快速的矩阵计算,而无需编写循环程序。对硬盘中的数组数据进行读写的工具,并对映射文件进行操作。线性代数,随机数生成和傅里叶变换功能。用于连接numpy到C/C++类库的C语言API。 numpy本身并不提供建模和科学函数,理解numpy的数组以及基于数组的计算将帮助更高效的使用基于数组的工具,如pandas。 对于大多数数据分析应用,要关注在数据处理、清洗、构造子集、过滤、变换以及其他运算中进行快速的向量化计算。 常见的数组算法,sort、unique以及set操作。高效的描述性统计和聚合数据。数据排列和相关数据操作,如对异构数据进行merge和join。使用数组表达式来表明条件逻辑。分组数据的操作:聚合、变换、函数式操作。 numpy的设计对与含有大量数组的数据非常有效;numpy在内部将数据储存在连续的内存块上;numpy算法库使用C语言写,所以在操作数据内存时
  • 单个变量的频率表(Frequency table for a single variable)
    问题 当天最后一个新手熊猫问题:如何为单个系列生成一张表? 例如: my_series = pandas.Series([1,2,2,3,3,3]) pandas.magical_frequency_function( my_series ) >> { 1 : 1, 2 : 2, 3 : 3 } 大量的搜寻已将我带到Series.describe()和pandas.crosstabs,但是这些都不满足我的需要:一个变量,按类别计数。 哦,如果它适用于不同的数据类型(字符串,整数等),那就太好了。 回答1 也许.value_counts() ? >>> import pandas >>> my_series = pandas.Series([1,2,2,3,3,3, "fred", 1.8, 1.8]) >>> my_series 0 1 1 2 2 2 3 3 4 3 5 3 6 fred 7 1.8 8 1.8 >>> counts = my_series.value_counts() >>> counts 3 3 2 2 1.8 2 fred 1 1 1 >>> len(counts) 5 >>> sum(counts) 9 >>> counts["fred"] 1 >>> dict(counts) {1.8: 2, 2: 2, 3: 3, 1: 1, 'fred': 1}
  • Pandas - 按日期对日内时间序列进行分组(Pandas - grouping intra day timeseries by date)
    问题 我有一个多天的日内系列日志回报,我想将其下采样到每日 ohlc。 我可以做类似的事情 hi = series.resample('B', how=lambda x: np.max(np.cumsum())) low = series.resample('B', how=lambda x: np.min(np.cumsum())) 但是在每次调用时计算 cumsum 似乎效率低下。 有没有办法先计算 cumsums,然后将 'ohcl' 应用于数据? 1999-08-09 12:30:00-04:00 -0.000486 1999-08-09 12:31:00-04:00 -0.000606 1999-08-09 12:32:00-04:00 -0.000120 1999-08-09 12:33:00-04:00 -0.000037 1999-08-09 12:34:00-04:00 -0.000337 1999-08-09 12:35:00-04:00 0.000100 1999-08-09 12:36:00-04:00 0.000219 1999-08-09 12:37:00-04:00 0.000285 1999-08-09 12:38:00-04:00 -0.000981 1999-08-09 12:39:00-04:00 -0.000487 1999-08-09 12
  • Pandas:数据分组(groupby)
    文章目录 1.分组分组的基本方法分组后各组内信息提取方法按照数值类型进行分组通过字典或Series进行分组通过函数分组 2.分组计算的函数方法单函数计算方法(与numpy类似)多函数计算(函数agg()) 3. 分组转换及一般性“拆分-应用-合并”数据分组转换transform一般化Groupby方法:apply 课后作业 当我们需要对某些标签或索引的局部进行累计分析时,就需要用到 groupby了。虽然“分组”(group by)这个名字时借用SQL数据库语言的命令,但其理念引用发明R语言frame的Hadley Wickham的观点可能更合适:分割(split)、应用(apply)和组合(combine)。 下图中清晰的展示了groupby的过程: 分隔步骤将DataFrame按照指定的键分隔成若干组应用步骤对每个组应用函数,通常是累计、转换或过滤函数组合步骤将每一组的结果合并成一个输出数组 ''' 分组统计 - groupby功能 ① 根据某些条件将数据拆分成组 ② 对每个组独立应用函数 ③ 将结果合并到一个数据结构中 Dataframe在行(axis=0)或列(axis=1)上进行分组,将一个函数应用到各个分组并产生一个新值,然后函数执行结果被合并到最终的结果对象中。 ''' df.groupby(by=None, axis=0, level=None, as_index
  • Python:基于某些行appers的pandas数据框中的两列(变量)获得频率计数(Python: get a frequency count based on two columns (variables) in pandas dataframe some row appers)
    问题 您好,我有以下数据框。 Group Size Short Small Short Small Moderate Medium Moderate Small Tall Large 我想计算同一行出现在数据框中的次数。 Group Size Time Short Small 2 Moderate Medium 1 Moderate Small 1 Tall Large 1 回答1 您可以使用groupby的大小: In [11]: df.groupby(["Group", "Size"]).size() Out[11]: Group Size Moderate Medium 1 Small 1 Short Small 2 Tall Large 1 dtype: int64 In [12]: df.groupby(["Group", "Size"]).size().reset_index(name="Time") Out[12]: Group Size Time 0 Moderate Medium 1 1 Moderate Small 1 2 Short Small 2 3 Tall Large 1 回答2 熊猫1.1 value_counts现在接受多个列后进行更新 df.value_counts(["Group", "Size"]) 您也可以尝试pd.crosstab()
  • python频数统计value_counts和groupby方法
    python频数统计和groupby方法 频数统计可能的需求1:对DataFrame中所有的value进行频数统计可能的需求2:对某一列进行频数统计 groupby方法 频数统计 先用字典类型的数据创建一个DataFrame,test_data import pandas as pd test_data = pd.DataFrame({ 'x1': ["a", "b", "c", "b"], "x2": [1, 2, 3, 4], "x3": [4, 3, 2, 1] }) test_data 显示结果 😢显示效果实在是太丑了,做笔记就这么看吧 x1x2x30a141b232c323b41 可能的需求1:对DataFrame中所有的value进行频数统计 首先频数统计的话,什么方法比较好呢,查! 关键词:unique counts unique counts site::https://pandas.pydata.org 搜索结果是:value_counts “Return a Series containing counts of unique values.” 可以用这个方法的数据类型包括:SeriesGroupBy,Index,Series test_data的数据类型是DataFrame test_data.values的数据类型是array Series是增强版的一维数组
  • 如何更改matplotlib图的日期时间刻度标签频率?(How to change the datetime tick label frequency for matplotlib plots?)
    问题 下面显示了一个模拟数据图,其中包含我要修改的xtick。 默认情况下,pd.df.plot选择大约间隔3个月的日期作为刻度。 但是我想要的是每个月都在变动。 做这个的最好方式是什么? 那季节s呢? 先感谢您。 回答1 首先,您必须将pandas日期对象转换为python日期对象。 由于matplotlib内部日期转换功能,因此需要进行此转换。 然后使用matplotlib.dates函数设置所需的格式化程序和刻度位置,如下所示: import pandas as pd import numpy as np import matplotlib.pylab as plt import matplotlib.dates as mdates # convert date objects from pandas format to python datetime index = pd.date_range(start = "2015-07-01", end = "2017-01-01", freq = "D") index = [pd.to_datetime(date, format='%Y-%m-%d').date() for date in index] data = np.random.randint(1,100, size=len(index)) df = pd
  • python pandasivot_table在一列中计数频率(python pandas pivot_table count frequency in one column)
    问题 我对Python pandas的ivot_table还是很陌生,想问一种对一列中的值频率进行计数的方法,该列也链接到另一列ID。 DataFrame如下所示。 import pandas as pd df = pd.DataFrame({'Account_number':[1,1,2,2,2,3,3], 'Product':['A', 'A', 'A', 'B', 'B','A', 'B'] }) 对于输出,我想得到如下内容: Product A B Account_number 1 2 0 2 1 2 3 1 1 到目前为止,我尝试了以下代码: df.pivot_table(rows = 'Account_number', cols= 'Product', aggfunc='count') 这段代码给了我两个相同的东西。 上面的代码有什么问题? 我问这个问题的部分原因是,这个DataFrame只是一个例子。 我正在处理的实际数据有成千上万的account_numbers。 预先感谢您的帮助! 回答1 您需要将aggfunc指定为len : In [11]: df.pivot_table(index='Account_number', columns='Product', aggfunc=len, fill_value=0) Out[11]: Product A B
  • 理想国pandas入门教程
    01.简介 以Numpy为基础,借力Numpy模块在计算方面性能高基于matplotlib,能够简便的画图独特的数据结构 02.优势 增强图表的可读性便捷的处理数据的能力读取文件方便封装了matplotlib,numpy的画图和计算 03.Series结构 概念 一维的数组数据结构能够保存任意类型的数据 语法 pd.Series(data=None, index=None, dtype=None) 用于创建Series结构参数 data:传入的数据,可以是ndarray,list等序列结构index:索引,必须是唯一的,且与数据的长度相等。默认是从0-n的整数序列dtype:数据类型 简单创建 # coding:utf-8 # 作者:理想国真恵玩 import pandas as pd import numpy as np test_series = pd.Series(np.arange(10)) print(test_series) 指定索引创建 # coding:utf-8 # 作者:理想国真恵玩 import pandas as pd test_series = pd.Series(data=[1, 2, 3, 4], index=['a', 'b', 'c', 'd']) print(test_series) 通过字典创建:字典的键是索引 # coding:utf-8 #
  • 【Python】实训4:pandas统计分析基础(pandas基础操作)
    题目来源: 《Python数据分析与应用》第4章 pandas统计分析基础 【 黄红梅、张良均主编 中国工信出版集团和人民邮电出版社】 本博客题目文字主要来自: 印象笔记OCR文字识别转换(敲题目是不可能去敲题目的) 【OCR (Optical Character Recognition,光学字符识别)】 数据集下载链接(下载后找到第4章->实训数据) 实训1读取并查看P2P网络贷款数据主表的基本信息 1.训练要点 (1)掌握CSV数据读取方法 (2)掌握 DataFrame的常用属性与方法 (3)掌握pandas描述性统计方法。 2.需求说明 P2P网络贷款主表数据主要存放了网贷用户的基本信息。探索数据的基本信息,能洞察数据的整体分布、数据的类属关系,从而发现数据间的关联。 3.实现思路及步骤 (1)使用ndim、 shape、 memory_usage属性分别查看维度、大小、占用内存信息 (2)使用describe方法进行描述性统计,并剔除值相同或全为空的列。 #实训1:读取并查看P2P网络贷款数据主表的基本信息 import pandas as pd Master=pd.read_csv("./第4章-实训数据/Training_Master.csv",encoding="gbk") Userupdate=pd.read_csv("./第4章-实训数据/Training
  • 使用pandas进行年,年-月,年-月-日,数据分组
    使用pandas进行年,年-月,年-月-日,数据分组 #导入colab文件导入工具 from google.colab import files uploaded = files.upload() #导入pandas库 import pandas as pd #读取文件数据,并将数据中日期列转换为日期格式 data=pd.read_csv('hair_dryer.tsv',sep='\t') data['review_date']=pd.to_datetime(data['review_date']) #定义日期提取函数,这里将日期变为了连续数字(如202001),也可另写定义为如2020/01之类的格式 def year_month(x): a=x.year b=x.month return a*100+b #apply对data4['review_day']中的每一行数据进行year_month函数操作(提取年月),groupby函数再对apply调用变形后的数据,进行相同数据所在行的sum操作 data5=data4.groupby(data4['review_day'].apply(year_month)).sum() #运行效果: sale_count review_day 200203 1 200204 1 200205 0 200206 0 200207 1 ...
  • 从pandas DataFrame中的分组数据绘制直方图(Plotting histograms from grouped data in a pandas DataFrame)
    问题 在制定如何从熊猫数据框中的分组数据中绘制直方图块时,我需要一些指导。 这是一个例子来说明我的问题: from pandas import DataFrame import numpy as np x = ['A']*300 + ['B']*400 + ['C']*300 y = np.random.randn(1000) df = DataFrame({'Letter':x, 'N':y}) grouped = df.groupby('Letter') 在我的无知中,我尝试了以下代码命令: df.groupby('Letter').hist() 失败,并显示错误消息“ TypeError:无法连接'str'和'float'对象” 任何帮助,不胜感激。 回答1 我很忙,只是发现了使用hist方法中的by关键字的一种更简单的方法: df['N'].hist(by=df['Letter']) 这是用于快速扫描分组数据的非常方便的快捷方式! 对于未来的访客,此通话的结果如下图所示: 回答2 您的函数失败了,因为最终得到的groupby数据帧具有一个层次结构索引和两列(字母和N),因此当您执行.hist()它试图对两列进行直方图.hist() ,从而产生str错误。 这是熊猫绘图功能的默认行为(每列一个绘图),因此,如果您调整数据框的形状以使每个字母都是一列,那么您将获得所需的结果。
  • python中numpy、pandas、matplotlib的使用
    python中numpy、pandas、matplotlib的使用 文章目录 python中numpy、pandas、matplotlib的使用numpy生成数组(矩阵)基本运算操作索引操作array合并array分割numpy copy & deep copy补充 pandas了解SeriesDataFrameDataFrame描述信息统计方法和字符串离散化数据的合并和分组组合pandas中的时间序列 matplotlib绘制折线图绘制散点图绘制条形图绘制直方图补充 案例PM2.5 numpy numpy是在python中做科学计算的基础库,重在数值计算,也是大部分python科学计算库的基础库,多用于在大型、多维数组上执行数值运算 生成数组(矩阵) import numpy as np #使用numpy生成数组 t1 = np.array([1,2,3,]) print(t1) print(type(t1)) t2 = np.array(range(10)) print(t2) print(type(t2)) t3 = np.arange(4,10,2) print(t3) print(type(t3)) print(t3.dtype)#输出存放的数据的类型 print("**********") t4 = np.array(range(1,4),dtype = 'float'
  • Python3:Pandas的简单使用5(NaN值的处理,特殊显示值?的处理以及数据的分组和聚合)
    1.声明 当前的内容用于本人复习使用,主要是针对Pandas读取数据出现NaN值时的处理,以及读取的时候产生?或者其他值的处理,还有分组和统计。 2.处理NaN值 在读取数据的时候可能出现某个值缺失,这个时候Pandas默认使用NaN代替缺失值! 准备具有确实值的数据: import pandas as pd import numpy as np pd_dataFrame = pd.read_csv("test.csv",index_col=0) print("输出当前读取文件的数据:\n{}".format(pd_dataFrame)) print(type(pd_dataFrame.values.dtype)) # 从数据中可以看出当前的数据中存在许多NaN值 # 现在开始处理NaN值 print("判断当前的数据中具有NaN数据为:\n{}".format(pd_dataFrame.isna())) # 或者使用isnull() # print("判断当前的数据中具有NaN数据为:\n{}".format(pd_dataFrame.isnull())) # 或者使用pd.isna()或者pd.isnull() # print(pd.isnull(pd_dataFrame)) # print(pd.isna(pd_dataFrame)) # 处理NaN值,pd.mean(