如何从熊猫数据框中求和 - python

我正在尝试对字典中的部分会话进行求和,以便可以获取本周和上周的总计。

在一项测试中,我已经将JSON转换为熊猫数据框。我正在使用.sum()函数在熊猫中总结会话的总数。但是,我还需要知道本周和前一周的总会话数。我尝试了几种方法来求和(-1:-7)和(-8:-15)的值,但是我很确定我需要使用.iloc。

在:

response = requests.get("url")
data = response.json()
df=pd.DataFrame(data['DailyUsage'])

total_sessions = df['Sessions'].sum()
current_week= df['Sessions'].iloc[-1:-7]
print(current_week) 
total_sessions =['current_week'].sum

出:

Series([], Name: Sessions, dtype: int64)
AttributeError 'list' object has no attribute 'sum'

注意:我已经尝试过使用pd.to_numeric和不使用pd.to_numeric,并且还使用了slice和sum方法的语法变化。 Pandas感觉不太像Python,因此我对下一步的想法一无所知。

参考方案

假设df['Sessions']每天保持有效,并且您仅比较当前和前一周,则可以使用reshape为最近的14个值创建每周总和。

weekly_matrix = df['Sessions'][:-15:-1].values.reshape((2, 7))

然后,您可以对每一行求和并获得每周总和,最近的将是第一个元素。

import numpy as np    

weekly_sum = np.sum(weekly_matrix, axis=1)
current_week = weekly_sum[0]
previous_week = weekly_sum[1]

编辑:代码如何工作

让我们看一维数组,该数组由pandas Series的values属性访问。它包含最近14天,从最新到最旧的顺序排列。我将其称为x

x = array([14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1])

然后,在x上调用数组的reshape函数,以将该数据拆分为具有2行7列的2D数组(矩阵)。

reshape函数的默认行为是先填充一行中的所有列,然后再移动到下一行。因此,x [0]将是整形数组中的元素(1,1),x [1]将是元素(1,2),依此类推。在元素(1,7)用x [6]填充后(到本周为止),下一个元素x [7]将被放置在(2,1)中。这一直持续到完成整形操作为止,并在(2,7)中放置了x [13]。

这导致将x的前7个元素(当前周)放置在第一行中,并且将x的后7个元素(前一周)放置在第二行中。这称为weekly_matrix

weekly_matrix = x.reshape((2, 7))

# weekly_matrix = array([[14, 13, 12, 11, 10, 9, 8],
#                        [ 7,  6,  5,  4,  3, 2, 1]])

由于现在我们将每个星期的值组织在一个矩阵中,因此可以使用numpy.sum函数完成操作。 numpy.sum可以采用axis参数,该参数将控制如何计算值:

如果axis=None,则将所有元素加在一起。
如果为axis=0,则将添加每列中的所有行。在weekly_matrix的情况下,这将导致7个元素的一维数组([21,19,
17,15,13,11,9],这不是我们想要的结果
实际上每周增加等效天数)。
如果axis=1(作为解决方案的情况),则将添加每行中的所有列,对于weekly_matrix,将生成2元素的1D数组。此结果的顺序
数组遵循矩阵中各行的相同顺序(即元素
0是第一行的总和,元素1是第一行的总和
第二行)。因为我们知道第一行是当前星期,所以
第二行是上周,我们可以提取信息
使用这些索引,即

# weekly_sum = array([77, 28])
current_week = weekly_sum[0]     # sum of [14, 13, 12, 11, 10, 9, 8] = 77
previous_week = weekly_sum[1]    # sum of [ 7,  6,  5,  4,  3, 2, 1] = 28

在返回'Response'(Python)中传递多个参数 - python

我在Angular工作,正在使用Http请求和响应。是否可以在“响应”中发送多个参数。角度文件:this.http.get("api/agent/applicationaware").subscribe((data:any)... python文件:def get(request): ... return Response(seriali…

Python-Excel导出 - python

我有以下代码:import pandas as pd import requests from bs4 import BeautifulSoup res = requests.get("https://www.bankier.pl/gielda/notowania/akcje") soup = BeautifulSoup(res.cont…

Python exchangelib在子文件夹中读取邮件 - python

我想从Outlook邮箱的子文件夹中读取邮件。Inbox ├──myfolder 我可以使用account.inbox.all()阅读收件箱,但我想阅读myfolder中的邮件我尝试了此页面folder部分中的内容,但无法正确完成https://pypi.python.org/pypi/exchangelib/ 参考方案 您需要首先掌握Folder的myfo…

Python:如何根据另一列元素明智地查找一列中的空单元格计数? - python

df = pd.DataFrame({'user': ['Bob', 'Jane', 'Alice','Jane', 'Alice','Bob', 'Alice'], 'income…

R'relaimpo'软件包的Python端口 - python

我需要计算Lindeman-Merenda-Gold(LMG)分数,以进行回归分析。我发现R语言的relaimpo包下有该文件。不幸的是,我对R没有任何经验。我检查了互联网,但找不到。这个程序包有python端口吗?如果不存在,是否可以通过python使用该包? python参考方案 最近,我遇到了pingouin库。