我正在使用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)。这不能正确反映实际的月销售量。
有人知道如何解决这个问题吗?
答案 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