我有一个超过 500K 行和 20 列的数据框。我试图根据 date_received
列确定 personId
接收某些内容的频率,所有其他列与此任务无关,但对后续任务有用。
|---------------------|------------------|
| 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 |
|---------------------|------------------|
因此,一般来说,第一个人每 2 天就会收到一些东西,第二个人每 20.5 天就会收到一些东西。
我尝试使用 groupby
函数,但仍然无法通过我的数据帧获得响应。
有人可以帮我解决这个问题吗?
最佳答案
使用groupby
和lambda
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])
关于python - 如何计算Python中groupby日期的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41455272/