【发布时间】:2015-07-13 06:21:36
【问题描述】:
我有一个数据框,我想首先使用 groupby 方法来收集每列的第一个时间戳。
import pandas as pd
from pandas import DataFrame
import datetime as dt
ts1 = dt.datetime.now()
ts2 = dt.datetime.now()
ts3 = dt.datetime.now()
DFdate=DataFrame([{'timestamp1':ts1,'ID':'A'},{'timestamp2':ts2,'ID':'A'},{'timestamp3':ts3,'ID':'A'}])
生成一个这样的数据框,其中缺少的时间戳被 NaT 替换:
ID timestamp1 timestamp2 timestamp3
0 A 2015-07-12 23:19:38.044 NaT NaT
1 A NaT 2015-07-12 23:19:38.044 NaT
2 A NaT NaT 2015-07-12 23:19:38.044
然后在这个数据框上执行groupby first方法:
DFdate.groupby('ID').first()
出乎我意料的是,会生成这样一个数据框,其中 NaT 被选为它们出现在时间戳之前的列的第一个值:
timestamp1 timestamp2 timestamp3
ID
A 2015-07-12 23:19:38.044 NaT NaT
我的期望是得到低于每列具有原始数据框中列的第一个非 NaT 值的位置。
timestamp1 timestamp2 timestamp3
ID
A 2015-07-12 23:19:38.044 2015-07-12 23:19:38.044 2015-07-12 23:19:38.044
下图显示了在 groupby first 方法的结果中没有使用 NaN。
DFnum=DataFrame([{'Num1':1,'ID':'A'},{'Num2':2,'ID':'A'},{'Num3':3,'ID':'A'}])
此数据框中的结果:
ID Num1 Num2 Num3
0 A 1 NaN NaN
1 A NaN 2 NaN
2 A NaN NaN 3
执行 groupby first 方法会产生预期的结果(结果中没有 NaN):
DFnum.groupby('ID').first()
Num1 Num2 Num3
ID
A 1 2 3
groupby 不应该首先只使用实时时间戳并跳过 NaT:s 吗?
我使用的是 Pandas 0.16.2 版
【问题讨论】:
标签: pandas