python - 大熊猫的不同天数
问题描述
我有以下架构:
H T datetime
002599f58 A 2019-09-23
002599f58 A 2019-09-23
002599f58 A 2019-09-23
002599f58 A 2019-09-26
002599f58 C 2019-09-26
005344fe8 C 2019-09-30
005344fe8 D 2019-10-02
005344fe8 D 2019-10-05
我需要做的是计算H在T中的不同天数。我试过了:
grouper = Grouper(key="datetime", freq="1D")
df = cdr.groupby(["H", "T", grouper])["datetime"].nunique().reset_index(name="numdays")
和其他类型,如size()
. 我现在有 14 天,但是当我对值进行排序时,它们给了我大于 14 的数字,所以我知道这些是错误的,但我不知道为什么。
预期的输出是一个数据框
H T numdays
002599f58 A 2 (23 & 26)
002599f58 C 1 (26)
005344fe8 C 1 (30)
005344fe8 D 2 (02 & 05)
它告诉我,对于每个不同的 H 和 T,H 在 T 中的不同天数,其中numdays
不能大于 14(因为这是我拥有的所有天数)。我不需要括号中的数据,只是为了显示值的来源。
解决方案
我相信您需要删除Grouper
并添加日期Series.dt.date
:
cdr['datetime'] = pd.to_datetime(cdr['datetime'])
cdr['dates'] = cdr['datetime'].dt.date
df = cdr.groupby(["H", "T"])["dates"].nunique().reset_index(name="numdays")
print (df)
H T numdays
0 002599f58 A 2
1 002599f58 C 1
2 005344fe8 C 1
3 005344fe8 D 2
您可以通过将输出转换为列表来测试新旧解决方案:
print (cdr)
H T datetime
0 002599f58 A 2019-09-23 12:45:10
1 002599f58 A 2019-09-23 02:45:10
2 002599f58 A 2019-09-23 12:45:50
3 002599f58 A 2019-09-26 12:25:10
4 002599f58 C 2019-09-26 10:45:10
5 005344fe8 C 2019-09-30 12:25:10
6 005344fe8 D 2019-10-02 12:45:00
7 005344fe8 D 2019-10-05
cdr['dates'] = cdr['datetime'].dt.date
print (cdr.groupby(["H", "T"])["dates"].apply(list))
H T
002599f58 A [2019-09-23, 2019-09-23, 2019-09-23, 2019-09-26]
C [2019-09-26]
005344fe8 C [2019-09-30]
D [2019-10-02, 2019-10-05]
Name: dates, dtype: object
grouper = pd.Grouper(key="datetime", freq="1D")
print (cdr.groupby(["H", "T", grouper])["datetime"].apply(list))
H T datetime
002599f58 A 2019-09-23 [2019-09-23 12:45:10, 2019-09-23 02:45:10, 201...
2019-09-26 [2019-09-26 12:25:10]
C 2019-09-26 [2019-09-26 10:45:10]
005344fe8 C 2019-09-30 [2019-09-30 12:25:10]
D 2019-10-02 [2019-10-02 12:45:00]
2019-10-05 [2019-10-05 00:00:00]
Name: datetime, dtype: object
推荐阅读
- html - 根据父cointainer html css分配和证明引导行和列内容
- javascript - ReactJS:根据按钮内的文本更改按钮悬停属性
- pymc3 - arviz.plot_ppc:“后验预测均值”
- php - 在 PHP PDO 中使用 AES_ENCRYPT CBC 模式
- go - 长期存在的 GRPC 调用
- groovy - 是否可以在评估功能的清理块之前拦截 Spock 功能的执行?
- javascript - 算法:两个不重叠子数组的最大和
- python - 价格连续 n 天为正的概率
- ruby-on-rails - Rails 关联逻辑与代码
- scala - Scala计算rdd中的每个元素