【发布时间】:2022-01-11 08:05:57
【问题描述】:
我正在使用带有 DatetimeIndex 和两个附加列 A 和 B 的 DataFrame,并尝试提供一个输出 DataFrame 来回答如下问题:
在最早出现
A后的 6-12 个月内确定每个A的平均值B
我一直在使用 pd.Grouper 并了解如何在存储桶中对 DateTime 索引进行分组(例如 df.groupby(pd.Grouper(freq='M')).mean()),但不清楚如何计算自每个值 A 最早观察以来的一段时间内的平均值在数据集中。
输入 DataFrame 类似于:
data = {
'A': ['x', 'x', 'x', 'x', 'y', 'y', 'y', 'y', 'y'],
'B': [10, 32, 12, 13, 24, 32, 12, 72, 90],
'created_on': [
'2018-01-31',
'2019-02-25',
'2018-02-12',
'2019-05-31',
'2021-03-12',
'2020-04-23',
'2016-01-11',
'2016-05-02',
'2018-12-31',
]
}
df = pd.DataFrame(data)
df = df.set_index(pd.to_datetime(df['created_on']))
df.drop(['created_on'], axis=1, inplace=True)
这会生成一个如下所示的 DataFrame:
+------------+---+----+
| created_on | A | B |
+------------+---+----+
| 2018-01-31 | x | 10 |
| 2019-02-25 | x | 32 |
| 2019-05-31 | x | 13 |
| 2021-03-12 | y | 24 |
| 2016-05-02 | y | 72 |
| ... | . | .. |
+------------+---+----+
目标是所需的输出,形状如下:
+---+----------------------------------------------+
| A | avg_B_6_12_months_after_earliest_observation |
+---+----------------------------------------------+
| x | 12.2 |
| y | 18.1 |
+---+----------------------------------------------+
上面avg_B_6_12_months_after_earliest_observation 列中的值仅作为示例,它们与示例输入DataFrame 中提供的值无关。
【问题讨论】:
-
请添加一个示例,说明如何计算
x的平均值 -
您能否详细说明第 6-12 个月内的每个
A?我不明白你是如何得到 x 和 y 的12.2和18.1 -
@Chris 道歉,更新了问题以澄清。我添加的数字只是为了提供示例值,它们与示例输入并不相关。
-
好的,但仍然对逻辑感到困惑。您想要
A中每个项目的平均值,不包括它们的第一次出现,以及只有那些月份在 6 到 12 之间? -
@Chris 对于数据中的每个
A,我正在寻找数据中第一次观察到A后第6 个月到第12 个月之间的平均B。对于数据中的每个客户A,类似“客户A在他们下第一个订单后的 6-12 个月内的所有订单中平均花费了B”。
标签: python pandas dataframe time-series