【问题标题】:Group by min of date in pandas dataframe, returning nanoseconds not days在熊猫数据框中按日期的最小值分组,返回纳秒而不是天
【发布时间】:2016-02-03 05:34:42
【问题描述】:

我正在尝试按相应单元格的最短日期对“客户名称”列的条目进行分组。

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

这让我相信我减去的是纳秒而不是天。

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

谢谢

【问题讨论】:

    标签: python date pandas dataframe


    【解决方案1】:

    我尝试了您的测试数据框,min 值与您不同 - 也许您正在使用 max

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

    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 - 可能是错误。

    【讨论】:

      猜你喜欢
      • 2020-04-10
      • 2019-05-11
      • 2020-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      • 2021-05-30
      • 2021-03-18
      相关资源
      最近更新 更多