【发布时间】:2013-05-10 13:56:24
【问题描述】:
我有一个这样定义的 pandas 数据框:
last_4_weeks_range = pandas.date_range(
start=datetime.datetime(2001, 5, 4), periods=28)
last_4_weeks = pandas.DataFrame(
[{'REST_KEY': 1, 'DLY_TRN_QT': 80, 'DLY_SLS_AMT': 90,
'COOP_DLY_TRN_QT': 30, 'COOP_DLY_SLS_AMT': 20}] * 28 +
[{'REST_KEY': 2, 'DLY_TRN_QT': 70, 'DLY_SLS_AMT': 10,
'COOP_DLY_TRN_QT': 50, 'COOP_DLY_SLS_AMT': 20}] * 28,
index=last_4_weeks_range.append(last_4_weeks_range))
last_4_weeks.sort(inplace=True)
当我去重新采样时:
In [265]: last_4_weeks.resample('7D', how='sum')
Out[265]:
COOP_DLY_SLS_AMT COOP_DLY_TRN_QT DLY_SLS_AMT DLY_TRN_QT REST_KEY
2001-05-04 280 560 700 1050 21
2001-05-11 280 560 700 1050 21
2001-05-18 280 560 700 1050 21
2001-05-25 280 560 700 1050 21
2001-06-01 0 0 0 0 0
我最终得到了一个我不希望看到的额外空垃圾箱 -- 2001-06-01。我不希望那个垃圾箱在那里,因为我的 28 天可以平分到我正在执行的 7 天重新采样中。我试过弄乱封闭的kwarg,但我无法逃脱那个额外的垃圾箱。为什么当我没有任何东西可以放入时出现额外的垃圾箱?如何避免生成它?
我最终想要做的是获得每个 REST_KEY 的 7 天平均值,所以做一个
In [266]: last_4_weeks.groupby('REST_KEY').resample('7D', how='sum').mean(level=0)
Out[266]:
COOP_DLY_SLS_AMT COOP_DLY_TRN_QT DLY_SLS_AMT DLY_TRN_QT REST_KEY
REST_KEY
1 112 168 504 448 5.6
2 112 280 56 392 11.2
但是那个额外的空箱子让我失去了平均值(例如,对于 COOP_DLY_SLS_AMT,我得到 112,即 (20 * 7 * 4) / 5 而不是我从 (20 * 7 * 4) 得到的 140 / 4 如果我没有那个额外的 bin。)我也不希望 REST_KEY 出现在聚合中,因为它是 groupby 的一部分,但这确实是一个较小的问题。
附:我正在使用熊猫 0.11.0
【问题讨论】:
-
一个快速的解决方法是只取前 4 个元素
[0:4]但是... -
这很奇怪。如果我计算而不是总和,我最终不会得到额外的垃圾箱。 (在 0.11 中)
标签: python numpy pandas grouping resampling