2016-07-24 60 views
0

这里是假的数据:怎么办时间差异上的每个组熊猫Python中

df = pd.DataFrame({'email': ['u1','u1','u1','u2','u2','u2'], 
       'timestamp': [3, 1, 5, 11, 15, 9]}) 

我打算检索是各组的电子邮件的时间差异。因此,每个组由时间戳排序后,数据应该是:

u1 5 
u1 3 
u1 1 
u2 15 
u2 11 
u2 9 

的结果应该是:

u1 2 # 5-3 
u1 2 # 3-1 
u2 4 # 15-11 
u2 2 # 11-9 

谁能告诉我,我下一步该做什么?万分感谢。

回答

3
df = pd.DataFrame({'email': ['u1','u1','u1','u2','u2','u2'], 
        'timestamp': [3, 1, 5, 11, 15, 9]}) 

(df.sort_values(['email', 'timestamp'], ascending=[True, False]) 
.groupby('email')['timestamp'] 
.diff(-1) 
.dropna()) 
Out: 
2 2.0 
0 2.0 
4 4.0 
3 2.0 
Name: timestamp, dtype: float64 

为了保持电子邮件列:

df.sort_values(['email', 'timestamp'], ascending=[True, False], inplace=True) 
df.assign(diff=df.groupby('email')['timestamp'].diff(-1)).dropna() 
Out: 
    email timestamp diff 
2 u1   5 2.0 
0 u1   3 2.0 
4 u2   15 4.0 
3 u2   11 2.0 

如果你不想timestamp列,你可以在末尾添加.drop('timestamp', axis=1)

+0

@MaxU该指数也更有意义。谢谢。 – ayhan

+0

我们可以将索引(2,0,4,3)切换到上一个相应的电子邮件列吗?谢谢 – Judking

+0

@Judking请参阅编辑。 – ayhan