作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个看起来像这样的数据框:
ID Date Volume Sales
0 1 2019-01-01 3.333333 1.333333
1 1 2019-02-01 3.333333 1.333333
2 1 2019-03-01 3.333333 1.333333
3 1 2019-04-01 2.666667 2.000000
4 1 2019-05-01 2.666667 2.000000
5 1 2019-06-01 2.666667 2.000000
6 2 2019-01-01 2.000000 2.666667
7 2 2019-02-01 2.000000 2.666667
8 2 2019-03-01 2.000000 2.666667
9 2 2019-04-01 1.333333 3.333333
10 2 2019-05-01 1.333333 3.333333
11 2 2019-06-01 1.333333 3.333333
我想总结每个组(ID)内一组日期的数据(数量和销售额)。
ID Date Volume Sales
1 2019-01-01 to 2019-04-01 12.67 6
1 2019-02-01 to 2019-05-01 12 6.66
2 2019-01-01 to 2019-04-01 7.33 11.33
2 2019-02-01 to 2019-05-01 6.66 12
不需要在输出中包含日期列
最佳答案
df["group_1"] = (df["Date"] >= pd.Timestamp("2019-01-01")) & (
df["Date"] <= pd.Timestamp("2019-04-01")
)
df["group_2"] = (df["Date"] >= pd.Timestamp("2019-02-01")) & (
df["Date"] <= pd.Timestamp("2019-05-01")
)
g1 = df[df["group_1"] == True].groupby("ID")
g2 = df[df["group_2"] == True].groupby("ID")
df = pd.concat(
[
g1.agg({"Volume": "sum", "Sales": "sum"}),
g2.agg({"Volume": "sum", "Sales": "sum"}),
]
).sort_index()
print(df)
打印:
Volume Sales
ID
1 12.666666 5.999999
1 12.000000 6.666666
2 7.333333 11.333334
2 6.666666 12.000000
Date
柱子:
...
df = pd.concat(
[
g1.agg({"Volume": "sum", "Sales": "sum"}).assign(
Date="2019-01-01 to 2019-04-01"
),
g2.agg({"Volume": "sum", "Sales": "sum"}).assign(
Date="2019-02-01 to 2019-05-01"
),
]
).sort_index()
打印:
Volume Sales Date
ID
1 12.666666 5.999999 2019-01-01 to 2019-04-01
1 12.000000 6.666666 2019-02-01 to 2019-05-01
2 7.333333 11.333334 2019-01-01 to 2019-04-01
2 6.666666 12.000000 2019-02-01 to 2019-05-01
df["Date"] = pd.to_datetime(df["Date"])
# add dates to this group:
groups = [
[pd.Timestamp("2019-01-01"), pd.Timestamp("2019-04-01")],
[pd.Timestamp("2019-02-01"), pd.Timestamp("2019-05-01")],
[pd.Timestamp("2019-03-01"), pd.Timestamp("2019-06-01")],
]
grouped = []
for i, (t1, t2) in enumerate(groups, 1):
df["group_{}".format(i)] = (df["Date"] >= t1) & (df["Date"] <= t2)
grouped.append(
df[df["group_{}".format(i)] == True]
.groupby("ID")
.agg({"Volume": "sum", "Sales": "sum"})
.assign(Date="{} to {}".format(t1.date(), t2.date()))
)
df = pd.concat(grouped).sort_index()
print(df)
打印:
Volume Sales Date
ID
1 12.666666 5.999999 2019-01-01 to 2019-04-01
1 12.000000 6.666666 2019-02-01 to 2019-05-01
1 11.333334 7.333333 2019-03-01 to 2019-06-01
2 7.333333 11.333334 2019-01-01 to 2019-04-01
2 6.666666 12.000000 2019-02-01 to 2019-05-01
2 5.999999 12.666666 2019-03-01 to 2019-06-01
关于python - 遍历日期范围并找到每组中的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67045995/
我是一名优秀的程序员,十分优秀!