在pandas数据帧中按日期分组,返回纳秒而不是天

时间:2016-02-03 05:34:43

标签: python date pandas dataframe

我尝试对该列的条目进行分组'客户名称'通过最小日期相应的单元格。

Client Name     Recency
A               -10 days
B               -4 days
C               -1 days
A               -5 days
B               -2 days
C                0 days

所以最终的结果应该是

A               -5
B               -2
C                0

当我检查我的“新近度”的类型时。我明白了:

>> df['recency'].dtype
dtype('<m8[ns]')

我觉得我的问题是因为我的日子是几纳秒?但我发现这很奇怪,因为它在专栏中写了几天。

然而,当我进行分组时:

>> df.groupby(['Client Name'], sort=False)['recency'].min()
A                          -73785600000000000
B                          -345600000000000
C                           0

这让我相信我减去了纳秒,而不是几天。

为什么数据帧的列会变为纳秒?我如何返回天的最小值而不是纳秒?

由于

1 个答案:

答案 0 :(得分:0)

我尝试测试数据框,min值与您不同 - 可能您使用的是max

您可以尝试使用子集df[['Recency','Client Name']]更改groupby

print df
  Client Name  Recency
0           A -10 days
1           B  -4 days
2           C  -1 days
3           A  -5 days
4           B  -2 days
5           C   0 days

print df[['Recency','Client Name']].groupby(['Client Name'], sort=False).min()
             Recency
Client Name         
A           -10 days
B            -4 days
C            -1 days

如果您需要删除文字days,请将timedelta转换为int

df['RecencyNo'] = (df['Recency'] / np.timedelta64(1, 'D')).astype(int)
print df
  Client Name  Recency  RecencyNo
0           A -10 days        -10
1           B  -4 days         -4
2           C  -1 days         -1
3           A  -5 days         -5
4           B  -2 days         -2
5           C   0 days          0

print df.groupby(['Client Name'], sort=False)['RecencyNo'].min()
Client Name
A   -10
B    -4
C    -1
Name: RecencyNo, dtype: int32

编辑:

您可以查看issue 5724 - 也许是错误。