Jer*_*emy 10 python numpy pandas
我有一些看起来像这样的数据:
user timestamp value1
a 2007-01-01 7
a 2007-02-02 8
a 2007-02-03 9
b 2007-02-04 1
a 2007-02-05 2
b 2007-02-06 3
b 2007-02-07 4
a 2007-02-08 5
...
Run Code Online (Sandbox Code Playgroud)
每个用户具有不同数量的条目.
我的目标是了解这些条目的生成速度,并输出如下内容:
last_entry median_entry first_entry
user
a 2007-02-08 2007-02-03 2007-01-01
b 2007-02-07 2007-02-06 2007-02-04
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的代码如下:
gb = df.groupby('user')
time_median = gb['timestamp'].median()
Run Code Online (Sandbox Code Playgroud)
但这给了我DataError: No numeric types to aggregate,大概是因为日期不是数字.
我想可以将日期转换为时间戳,并找到它们的中位数,然后将它们转回date_time对象.这是最好的方式吗?
您可以为每个用户使用和.searchsorted()之间的一半天数:maxmin
df = pd.DataFrame(data={'user': np.random.choice(['a', 'b','c'], size=100, replace=True), 'value': np.random.random(size=100), 'time_stamp': pd.date_range(start=date(2016, 1,1), freq='D', periods=100)})
df.groupby('user')['time_stamp'].describe()
user
a count 28
unique 28
top 2016-02-03 00:00:00
freq 1
first 2016-01-01 00:00:00
last 2016-04-05 00:00:00
b count 38
unique 38
top 2016-03-24 00:00:00
freq 1
first 2016-01-02 00:00:00
last 2016-04-08 00:00:00
c count 34
unique 34
top 2016-01-28 00:00:00
freq 1
first 2016-01-03 00:00:00
last 2016-04-09 00:00:00
Run Code Online (Sandbox Code Playgroud)
对于中位数:
df.groupby('user')['time_stamp'].apply(lambda x: x.sort_values().iloc[x.searchsorted(x.min() + (x.max()-x.min())/2)])
dtype: object
user
a 54 2016-02-24
b 50 2016-02-20
c 51 2016-02-21
dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
792 次 |
| 最近记录: |