对熊猫进行重新采样以获取具有时间序列数据的每月平均值

时间:2019-04-28 13:30:49

标签: python-3.x pandas time-series

我正在使用Tableau(https://community.tableau.com/thread/194200)中的时间序列数据集,其中包含每日的家具销售量,并且我想重新采样以获取平均每月销售量。

我尝试在Pandas中使用重采样来获取每月平均值:

There are four days in January selling furniture, 
and there is no sales in the rest of Jan.

Order Date   Sales
...
2014/1/6     2573.82
2014/1/7     76.728
2014/1/16    127.104
2014/1/20    38.6
...

y_furniture = furniture['Sales'].resample('MS').mean()

我希望结果是每月的实际平均销售额。

也就是说,所有日销售量相加并除以31天,即90.85,但是代码将总和除以4(即704)。这不能正确反映实际的月销售量。

有人知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

您可以使用数据透视表获取每月的平均销售额: 试试:

df['Order_date']=pd.to_datetime(df['Order_date'])
df['Month']=df['Order_date'].dt.month
df_pivot=df.pivot_table(columns='Month',aggfunc='mean')

答案 1 :(得分:0)

  

我不确定您的预期ans是90.85还是704。所以我   为两者都提供解决方案,请根据您的要求进行选择。

l1 = ['Order Date',
      'Sales',
      ]
l2 = [['2014/1/6',2573.82],
        ['2014/1/7',76.728],
        ['2014/1/16',127.104],
        ['2014/1/20',38.6],
        ['2014/2/20',38.6],
     ]
df = pd.DataFrame(l2, columns=l1)

df['Order Date'] = pd.to_datetime(df['Order Date'])  #make sure Order Date is of Date type



x = df.groupby(df['Order Date'].dt.month).mean()  #or .agg('mean')
#### Output  ####
Order Date         
1           704.063
2            38.600



def doCalculation(df):
    groupSum = df['Sales'].sum()
    return (groupSum / df['Order Date'].dt.daysinmonth)

y = df.groupby(df['Order Date'].dt.month).apply(doCalculation).groupby(['Order Date']).mean()

#### Output ####
Order Date
1    90.846839
2     1.378571