我有一个带有混合数据类型列的数据帧,我应用了pd.to_datetime(df['DATE'],coerce=True)
,得到了下面的数据帧
CUSTOMER_name DATE
abc NaT
def NaT
abc 2010-04-15 19:09:08
def 2011-01-25 15:29:37
abc 2010-04-10 12:29:02
现在我要应用一些agg函数(这里我要按mailid分组并取min()的Date来查找mailid的第一个事务的日期)。
df['DATE'] = [x.date() for x in df['DATE']]
#Here the value goes to
CUSTOMER_name DATE
abc 0001-255-255 ####how??
def 0001-255-255 ###How??
abc 2010-04-15
def 2011-01-25
abc 2010-04-10
#Then when i do a groupby and applying min on DATE
df.groupby('CUSTOMER_name')['DATE'].min()
#CUSTOMER_name DATE
abc 0001-255-255 ####i want 2010-04-10
def 0001-255-255 ### i want 2011-01-25
那么有谁能建议一下,在转换为date()时如何处理这个NaT,在执行groupby和min()时如何排除NaT进行计算呢。
以下是另一种解决方案:
数据:
解决方案:
说明:
首先,我们创建一个新的虚拟列
D
,其中包含截断的时间部分:现在我们可以按每组的
CUSTOMER_name
和calclulate minimumD
分组:最后将结果列转换为
datetime64[ns]
类型:假设你从这样开始:
(注意,唯一的区别是添加映射到
NaT
的fff
)。然后,按您的要求执行以下操作:
这是因为
groupby
-min
已经在适当的地方排除了丢失的数据(尽管更改了结果的格式),最后的pd.to_datetime
再次将结果强制为datetime
。要获取结果的日期部分(我认为这是一个单独的问题),请使用
.dt.date
:相关问题 更多 >
编程相关推荐