如何计算Python中的日期平均值

时间:2017-01-04 02:24:28

标签: python pandas

我有一个超过500K行和20列的数据帧。我正在尝试根据personId列确定date_received收到某些内容的频率,所有其他列与此任务无关,但对后续任务非常有用。

|---------------------|------------------|
|      personId       |  date_Recieved   |
|---------------------|------------------|
|          1          |   2 feb 2016     |
|---------------------|------------------|
|          1          |   4 feb 2016     |
|---------------------|------------------|
|          1          |   6 feb 2016     |
|---------------------|------------------|
|          2          |   10 dec 2016    |
|---------------------|------------------|
|          2          |   1 jan 2017     |
|---------------------|------------------|
|          2          |   20 jan 2017    |
|---------------------|------------------|

date_received的类型为pandas.tslib.Timestamp我正在寻找类似的内容:

|---------------------|------------------|
|      personId       |  Frequency       |
|---------------------|------------------|
|          1          |      2 days      |
|---------------------|------------------|
|          2          |     20.5 days    |
|---------------------|------------------|

所以普通人1每2天接收一次,第2个人每20.5天接收一次。

我尝试使用groupby功能,但仍然无法通过我的数据框获得响应。

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:3)

使用groupbylambda

df.groupby('personId').date_Recieved.apply(lambda x: x.diff().dropna().mean())

personId
1    2 days 00:00:00
2   20 days 12:00:00
Name: date_Recieved, dtype: timedelta64[ns]

设置

txt = """
      personId         date_Recieved   
          1             2 feb 2016     
          1             4 feb 2016     
          1             6 feb 2016     
          2             10 dec 2016    
          2             1 jan 2017     
          2             20 jan 2017    
"""

df = pd.read_csv(StringIO(txt), sep='\s{2,}', engine='python', parse_dates=[1])