我正在尝试对字典中的部分会话进行求和,以便获得当前和上周的总计。
在一项测试中,我已将JSON转换为熊猫数据框。我正在使用.sum()函数汇总熊猫的会话总数。但是,我还需要知道本周和前一周的总会话数。我尝试了几种方法来求和(-1:-7)和(-8:-15)的值,但是我很确定我需要使用.iloc。
IN:
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
OUT:
Series([], Name: Sessions, dtype: int64)
AttributeError 'list' object has no attribute 'sum'
注意:我已经尝试过使用pd.to_numeric和不使用pd.to_numeric,并且还使用了slice和sum方法的语法变化。 Pandas感觉不太像Python,因此我对下一步的想法一无所知。
答案 0 :(得分:0)
假设from tkinter import *
import tkinter.ttk as ttk
class MainGUI:
def __init__(self, master):
self.master = master
self.data_view = ttk.Treeview(master)
self.data_view['columns'] = ["Date", "Item 1", "Item 2", "Item 3", "Item 4", "Source", "Destination", "Cart #",]
self.data_view['show'] = 'headings'
self.data_view.heading("Date", text="Date")
self.data_view.heading("Item 1", text="Item 1")
self.data_view.heading("Item 2", text="Item 2")
self.data_view.heading("Item 3", text="Item 3")
self.data_view.heading("Item 4", text="Item 4")
self.data_view.heading("Source", text="Source")
self.data_view.heading("Destination", text="Destination")
self.data_view.heading("Cart #", text="Cart #")
self.data_view.pack()
self.scan_entry = ttk.Entry(master)
self.scan_entry.pack()
self.scan_entry.bind('<Return>', self.parseEntry)
self.scan_entry.focus()
self.close_button = ttk.Button(master, text="Close", command=lambda:print('want to close app'))
self.close_button.pack(anchor='se')
def parseEntry(self,event):
#self.scan_entry.delete(0,'end')
self.data_view.insert('',END,values=('',self.scan_entry.get(),'','','','','',''))
#If contains certain characters, maybe insert into Source or Destination
if 'a' in self.scan_entry.get():
self.data_view.insert('',END,values=('','','','','',self.scan_entry.get(),self.scan_entry.get(),''))
if __name__=='__main__':
master=Tk()
maingui=MainGUI(master)
master.mainloop()
每天保持有效,并且您仅比较当前和前一周,则可以使用df['Sessions']
为最近的14个值创建每周总和。
reshape
然后,您可以对每一行求和并获得每周的总和,最近的将是第一个元素。
weekly_matrix = df['Sessions'][:-15:-1].values.reshape((2, 7))
编辑:代码的工作方式
让我们看一维数组,该数组由pandas系列的values属性访问。它包含最近14天,从最新到最旧的顺序排列。我将其称为import numpy as np
weekly_sum = np.sum(weekly_matrix, axis=1)
current_week = weekly_sum[0]
previous_week = weekly_sum[1]
。
x
然后在x = array([14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1])
上调用数组的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个元素位于第二行。这叫做x
。
weekly_matrix
由于现在我们可以将每个星期的值组织在一个矩阵中,因此我们可以使用numpy.sum函数来完成操作。 numpy.sum可以使用weekly_matrix = x.reshape((2, 7))
# weekly_matrix = array([[14, 13, 12, 11, 10, 9, 8],
# [ 7, 6, 5, 4, 3, 2, 1]])
参数,该参数将控制如何计算值:
axis
,则将所有元素加在一起。axis=None
,则将添加每列中的所有行。对于axis=0
,这将导致7个元素的1D数组([21,19,
17,15,13,11,9],这不是我们想要的结果
实际上每周增加相等的天数。)如果为weekly_matrix
(作为解决方案的情况),则将添加每一行中的所有列,对于axis=1
,将生成2元素的1D数组。此结果的顺序
数组遵循矩阵中各行的相同顺序(即元素
0是第一行的总和,元素1是第一行的总和
第二行)。因为我们知道第一行是当前星期,所以
第二行是上周,我们可以提取信息
使用这些索引
weekly_matrix
答案 1 :(得分:0)
要对固定数量的值进行分组和求和,例如使用每日数据和每周汇总,请考虑groupby
。您可以通过适当地切片系列来实现或的后退:
WriteEndElement()