假设我有一个以下格式的 pandas 数据框,显示了 2015 年每天某个时间戳商店中一个人的总购买价值(美元):
person_num date value
0 1 2015-01-01 00:23:32 298.00
1 2 2015-01-01 00:31:59 348.00
2 3 2015-01-01 02:30:21 533.00
3 4 2015-01-01 03:14:10 022.00
4 5 2015-01-01 05:51:43 448.00
5 6 2015-01-01 07:10:08 158.00
... ... ... ...
123728 123729 2015-12-31 23:13:34 109.00
等等。这截至2015年12月31日... 我怎样才能绘制每周的总价值。 因此,该图将在 x 轴上显示周数,在 y 轴上显示总价值(每周所有购买金额的总和)。
编辑:这仅适用于值列,不适用于人员编号
import pandas as pd
# Construct input dataframe
df = pd.DataFrame({
"person_num": [
1,
2,
3,
4,
5,
6,
],
"date": [
"2015-01-01 00:23:32",
"2015-01-02 00:31:59",
"2015-01-05 02:30:21",
"2015-01-06 03:14:10",
"2015-01-15 05:51:43",
"2015-01-16 07:10:08",
],
"value": [
298.00,
348.00,
533.00,
022.00,
448.00,
158.00,
],
})
# Construct dataframe with week number column and values column
df2 = df.loc[:, ["value"]]
df2["week_no"] = pd.to_datetime(df["date"]).dt.week
# Sum up weekly values
df3 = (
df2
.groupby("week_no")
.sum()
.reset_index()
)
# Plot results
df3.plot.scatter(x="week_no", y="value")
解决方案类似于链接的重复问题中的答案之一。试试这个:
df.groupby(df.date.dt.weekofyear)['value'].sum().plot(style='.')
另一种选择是使用
date
作为索引并对其进行重新采样。
df = df.set_index("date")
summed_values_per_week = df.resample("W").value.sum()
summed_values_per_week.plot()