【发布时间】:2016-12-13 05:08:30
【问题描述】:
我有一个包含混合数据类型列的数据框,我申请了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() 以及在进行 groupby 和 min() 时如何处理这个 NaT,如何排除 NaT 进行计算。
如果对于任何 customer_name 只有 NaT 将出现在 DATE 字段中,那么在 groupby 和 min() 上,我可以接受 nan 或 Null 值。
【问题讨论】:
-
无法重现
0001-255-255。做df['DATE'] = [x.date() for x in df['DATE']]时,我得到df['DATE']的同一列。就像@AmiTavory 在答案中所说,你的代码对我来说很好。当 DATE 字段中只有NaT时,我得到NaT值,groupby->min 和 groupby -> min 如果找到非 NaT 日期则忽略 NaT 值 -
您能否发布所需/预期的数据集或接受@AmiTavory 的回答 - 如果它回答了您的问题?
-
@M.Klugerford:就像在 Ami Tovery 的例子中一样,他用 'NaT' 作为字符串形成了数据框。在我的情况下,首先使用任何字符串('sd','we','df')代替'NaT',然后执行 df['DATE'] = pd.to_datetime(df['DATE'],coerce=True)然后 df['DATE'] = [x.date() for x in df['DATE']]。我相信你会收到 0001-255-255。
-
仍然无法重现@Satya 你使用的是什么版本的熊猫?
-
df = pd.DataFrame({ ... 'CUSTOMER_name': ['abc', 'def', 'abc', 'def', 'abc', 'fff'], .. 'DATE': ['T', 'N', '2010-04-15 19:09:08', '2011-01-25 15:29:37', '2010-04-10 12:29: 02', 'sa']}) 步骤 2) df['DATE'] = pd.to_datetime(df['DATE'],coerce=True)。步骤 3) df['DATE'] = [x.date() for x in df['DATE']] 在这之后 3) 我得到那些 0001-255-255 值。我在 pandas 0.16.1 和 python 3.4.1