首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Pandas Dataframe的简要计算

Pandas Dataframe的简要计算
EN

Stack Overflow用户
提问于 2013-11-01 14:03:50
回答 3查看 891关注 0票数 1

我有一个看起来像底部的DF (节选,有4个区域,每个季度的日期都在扩展)。

我想要创建一个df (按区域划分),其中仅包含最新日期与前一个季度和前一个季度(同一季度)之间的差异。

此时,region和Quradate都是索引。

所以我想要这样的东西(不是很接近):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(['region'] ['Quradate'][-1:-1])-(['region'] ['Quradate'][-2:-2]) 
& (['region']  ['Quradate'][-1:-1])-(['region'] ['Quradate'][-5:-5])  

因此,我将以每个地区两排结束,第一排与分数的差异(实际上有5分)从上个季度开始,第二行与前一年的差异。

卡住了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
                                                                  Score1      Score2  
region                                           Quradate           
North_Central-Birmingham-Tuscaloosa-Anniston 2010-01-15             47           50
                                             2010-04-15             45           60
                                             2010-07-15             45           40
                                             2010-10-15             42           43
                                             2011-01-15             46           44
                                             2011-04-15             45           45
                                             2011-07-15             45           45
                                             2011-10-15             43           46
                                             2012-01-15             51           55
                                             2012-04-15             53           56
                                             2012-07-15             51           57
                                             2012-10-15             52           58
                                             2013-01-15             50           50
                                             2013-04-15             55           55
                                             2013-07-15             55           56
                                             2013-10-15             51           66   
North_Huntsville-Decatur-Florence            2010-01-15             55           55
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-03 14:29:44

有关解决方案和讨论,请参见此处:Selecting a new dataframe via a multi-indexed frame in Pandas using index names

基本上,你所需要的是与前一时期的区别。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df.groupby(level='region').apply(lambda x: x.diff().iloc[-1])

和一年前的差别(4个季度)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df.groupby(level='region').apply(lambda x: x.diff(4).iloc[-1])
票数 1
EN

Stack Overflow用户

发布于 2013-11-01 15:48:02

我认为你有点走在正确的轨道上。在我看来,我会创建一个函数来计算您正在寻找的两个值,并返回一个数据框架。如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def find_diffs(region):
    score_cols = ['Score1', 'Score2']

    most_recent_date = region.Quradate.max()
    last_quarter = most_recent_date - datetime.timedelta(365/4) # shift by 4 months
    last_year = most_recent_date - datetime.timedelta(365) # shift by a year

    quarter_score_diff = region[region.Quradate == most_recent_date OR region.Quradate == last_quarter)].diff()
    quarter_score_diff['id'] = 'quarter_diff'

    year_score_diff = region[region.Quradate == most_recent_date OR region.Quradate == last_year)].diff()
    year_score_diff['id'] = 'year_diff'

    df_temp = quarter_score_diff.append(year_score_diff)
    return df_temp

然后你就可以:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DF.groupby(['region']).apply(find_diffs)

结果将是一个按区域索引的DF,其中包含针对每个分数差的列,以及一个额外的列,该列将每一行标识为四分之一或年度差异。

票数 0
EN

Stack Overflow用户

发布于 2013-11-03 09:03:31

编写一个与groupby一起使用的函数肯定是一种选择,另一件容易做的事情是列出组中的数据,并使用indeces进行计算,这是可能的,因为数据的间隔是固定的(并且要记住,只有在数据有规律的间隔时才能这样做)。这个方法可以避免真正处理日期的问题。首先,我将重新编制索引,以便该区域以列的形式出现在dataframe中,然后执行以下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#First I create some data
Dates = pd.date_range('2010-1-1', periods = 14, freq = 'Q')
Regions = ['Western', 'Eastern', 'Southern', 'Norhtern']
df = DataFrame({'Regions': [elem for elem in Regions for x in range(14)], \
            'Score1' : np.random.rand(56), 'Score2' : np.random.rand(56), 'Score3' : np.random.rand(56), \
            'Score4' : np.random.rand(56), 'Score5' : np.random.rand(56)}, index = list(Dates)*4)

# Create a dictionary to hold your data
SCORES = ['Score1', 'Score2', 'Score3', 'Score4', 'Score5']
ValuesDict = {region : {score : [int(), int()] for score in SCORES} for region in df.Regions.unique()}

#This dictionary will contain keys that are your regions, and these will correspond to a dictionary that has keys that are your scores and those correspond to a list of which the fisrt element is the most recent - last quarter calculation, and the second is the most recent - last year calcuation. 

#Now group the data
dfGrouped = df.groupby('Regions')

#Now iterate through the groups creating lists of the underlying data. The data that is at the last index point of the list is by definition the newest (due to the sorting when grouping) and the obervation one year previous to that is - 4 index points away.

for group in dfGrouped:
    Score1List = list(group[1].Score1)
    Score2List = list(group[1].Score2)
    Score3List = list(group[1].Score3)
    Score4List = list(group[1].Score4)
    Score5List = list(group[1].Score5)
    MasterList = [Score1List, Score2List, Score3List, Score4List, Score5List]
    for x in xrange(1, 6):
        ValuesDict[group[0]]['Score' + str(x)][0] = MasterList[x-1][-1] - MasterList[x-1][-2]
        ValuesDict[group[0]]['Score' + str(x)][1] = MasterList[x-1][-1] - MasterList[x-1][-5]

ValuesDict

这有点令人费解,但这是我经常处理这类问题的方式。dict值包含您所需的所有数据,但我很难将其转换为数据格式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19736144

复制
相关文章
pandas DataFrame的创建方法
在pandas里,DataFrame是最经常用的数据结构,这里总结生成和添加数据的方法: ①、把其他格式的数据整理到DataFrame中; ②在已有的DataFrame中插入N列或者N行。
py3study
2020/01/19
2.6K0
pandas DataFrame的创建方法
Pandas DataFrame笔记
1.属性方式,可以用于列,不能用于行 2.可以用整数切片选择行,但不能用单个整数索引(当索引不是整数时) 3.直接索引可以使用列、列集合,但不能用索引名索引行  用iloc取行,得到的series:
用户1075292
2018/01/23
9740
Pandas DataFrame笔记
Pandas-3. DataFrame
Series组成的字典可以作为参数来创建DataFrame。其索引是所有Series的索引的并集。 例子:
悠扬前奏
2019/05/28
1.2K0
Pandas DataFrame 取整列
使用 df = pd.read_csv("csv_file.csv") 读出来的数据 就是 DataFrame 格式 ? <class 'pandas.core.frame.DataFrame'>
莫听穿林
2022/01/10
1.7K0
Pandas 如何创建 DataFrame
我们已经知道了什么是 Series,在使用 Series 之前,我们得知道如何创建 Series。
用户7886150
2020/12/26
1.6K0
pandas和spark的dataframe互转
由于pandas的方式是单机版的,即toPandas()的方式是单机版的,所以参考breeze_lsw改成分布式版本:
机器学习和大数据挖掘
2019/07/01
2.9K0
(六)Python:Pandas中的DataFrame
        DataFrame与Series相比,除了可以每一个键对应许多值之外,还增加了列索引(columns)这一内容,具体内容如下所示:
小点点
2022/12/12
3.9K0
合并Pandas的DataFrame方法汇总
Pandas是数据分析、机器学习等常用的工具,其中的DataFrame又是最常用的数据类型,对它的操作,不得不熟练。在《跟老齐学Python:数据分析》一书中,对DataFrame对象的各种常用操作都有详细介绍。本文根据书中介绍的内容,并参考其他文献,专门汇总了合并操作的各种方法。
老齐
2021/03/11
5.7K0
python pandas dataframe函数_Python Pandas dataframe.ne()用法及代码示例
Python是进行数据分析的一种出色语言,主要是因为以数据为中心的python软件包具有奇妙的生态系统。 Pandas是其中的一种,使导入和分析数据更加容易。
用户7886150
2021/01/16
1.6K0
使用Pandas melt()重塑DataFrame
重塑 DataFrame 是数据科学中一项重要且必不可少的技能。在本文中,我们将探讨 Pandas Melt() 以及如何使用它进行数据处理。
deephub
2022/01/21
3K0
使用Pandas melt()重塑DataFrame
Pandas DataFrame 数据合并、连接
merge 通过键拼接列 pandas提供了一个类似于关系数据库的连接(join)操作的方法merage,可以根据一个或多个键将不同DataFrame中的行连接起来 语法如下:
马哥Python
2019/06/27
3.4K0
[869]pandas的dataFrame的行列索引操作
这里的index的索引列是从0开始的,那么现在我想要让它从1开始怎么做? 我搜了几篇文章,发现有的是:
周小董
2020/07/21
1.5K0
pandas中的 fillna使用(pandas.DataFrame.fillna)「建议收藏」
3、将“A”、“B”、“C”和“D”列中的所有 NaN 元素分别替换为 0、1、2 和 3。
全栈程序员站长
2022/09/22
3.5K0
pandas中的 fillna使用(pandas.DataFrame.fillna)「建议收藏」
Pandas DataFrame创建方法大全
Pandas是Python的数据分析利器,DataFrame是Pandas进行数据分析的基本结构,可以把DataFrame视为一个二维数据表,每一行都表示一个数据记录。本文将介绍创建Pandas DataFrame的6种方法。
用户1408045
2019/09/17
5.8K0
Pandas DataFrame创建方法大全
Pandas高级教程之:Dataframe的合并
Pandas提供了很多合并Series和Dataframe的强大的功能,通过这些功能可以方便的进行数据分析。本文将会详细讲解如何使用Pandas来合并Series和Dataframe。
子润先生
2021/06/18
2.3K0
Pandas DataFrame的基本属性详解
df = pd.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False) 创建一个DataFrame
全栈程序员站长
2022/08/22
1.3K0
Pandas DataFrame的基本属性详解
如何遍历pandas当中dataframe的行
现在需要遍历上面DataFrame的行。对于每一行,都希望能够通过列名访问对应的元素(单元格中的值)。也就是说,需要类似如下的功能:
马哥Python
2019/06/27
4K0
pandas dataframe的合并(append, merge, concat)
创建2个DataFrame:>>>df1=pd.DataFrame(np.ones((4,4))*1,columns=list('DCBA'),inde
Java架构师必看
2021/12/24
2.9K0
Pandas高级教程之:Dataframe的合并
Pandas提供了很多合并Series和Dataframe的强大的功能,通过这些功能可以方便的进行数据分析。本文将会详细讲解如何使用Pandas来合并Series和Dataframe。
程序那些事
2021/06/14
5.3K0
点击加载更多

相似问题

Pandas Dataframe -速率计算

116

计算Pandas Dataframe的整列

112

从pandas DataFrame计算pvalue

14

从Pandas DataFrame计算IDF

12

Pandas dataframe的群内计算

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文