Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 确定与上周数据相比增长超过10%的渠道_Python_Pandas_Numpy_Data Analysis - Fatal编程技术网

Python 确定与上周数据相比增长超过10%的渠道

Python 确定与上周数据相比增长超过10%的渠道,python,pandas,numpy,data-analysis,Python,Pandas,Numpy,Data Analysis,我有一个跨越不同时间戳的大数据帧。以下是我的尝试: all_data = [] for ws in wb.worksheets(): rows=ws.get_all_values() df_all_data=pd.DataFrame.from_records(rows[1:],columns=rows[0]) all_data.append(df_all_data) data = pd.concat(all_data) #Change data type data['

我有一个跨越不同时间戳的大数据帧。以下是我的尝试:

all_data = []
for ws in wb.worksheets():
  rows=ws.get_all_values()
  df_all_data=pd.DataFrame.from_records(rows[1:],columns=rows[0])
  all_data.append(df_all_data)

data = pd.concat(all_data)
   

 
#Change data type
data['Year'] = pd.DatetimeIndex(data['Week']).year
data['Month'] = pd.DatetimeIndex(data['Week']).month
data['Week'] = pd.to_datetime(data['Week']).dt.date
data['Application'] = data['Application'].astype('str')
data['Function'] = data['Function'].astype('str')
data['Service'] = data['Service'].astype('str')
data['Channel'] = data['Channel'].astype('str')
data['Times of alarms'] = data['Times of alarms'].astype('int')

#Compare Channel values over weeks

subchannel_df = data.pivot_table('Times of alarms', index = 'Week', columns='Channel', aggfunc='sum').fillna(0)
subchannel_df = subchannel_df.sort_index(axis=1)

我希望达到的目标:

  • 在数据帧末尾添加一个百分比行(最后一行与最后第二行),不包括以下情况:除以零和负百分比
  • 显示与上周相比增长超过10%的频道

  • 几天来,我一直在尝试不同的方法来实现这些目标。然而,我无法做到这一点。提前感谢。

    您可以使用shift函数作为SQL中与Lag window函数等效的函数来返回上周的值,然后在行级别执行计算。为了避免被零除,可以使用numpy where函数,该函数相当于SQL中的CASE WHEN。让我们假设您执行名为“X”的计算的列值

    输出:

    Channel     X   XLag  ChangePercentage
    Week            
    2020-06-12  12  5     140
    2020-11-15  15  10    50
    2020-11-22  20  15    33
    2020-12-13  27  16    69
    2020-12-20  100 27    270
    

    您可以使用shift函数作为SQL中的Lag窗口函数的等价物来返回上周的值,然后在行级别执行计算。为了避免被零除,可以使用numpy where函数,该函数相当于SQL中的CASE WHEN。让我们假设您执行名为“X”的计算的列值

    输出:

    Channel     X   XLag  ChangePercentage
    Week            
    2020-06-12  12  5     140
    2020-11-15  15  10    50
    2020-11-22  20  15    33
    2020-12-13  27  16    69
    2020-12-20  100 27    270
    

    我只想计算一下过去一周的增长(最后一行与最后第二行)。在这种情况下,为什么要使用shift函数?在这种情况下,是否可以在上周指数之后添加百分比?谢谢,哦,我知道了。这是为了演示。我提出的解决方案使您能够在每一行级别上观察这些变化,而不仅仅是最后一行。您可以确定随时间变化的趋势。如果它回答了你的问题,我会很感激接受它作为答案@user14483865I只想计算过去一周的增长(最后一行与最后第二行)。在这种情况下,为什么要使用shift函数?在这种情况下,是否可以在上周指数之后添加百分比?谢谢,哦,我知道了。这是为了演示。我提出的解决方案使您能够在每一行级别上观察这些变化,而不仅仅是最后一行。您可以确定随时间变化的趋势。如果它回答了你的问题,我会很感激接受它作为答案@用户14483865