【发布时间】:2015-03-09 11:54:43
【问题描述】:
我有一个带有列(除其他外)user_id 和 start_time 的 pandas 数据框。我想高效且易读地找到与每个用户的最大值 start_time 关联的所有行。
例如,如果这是我的数据:
user_id start_time A B C
1 37 a b c
1 45 d e f
1 45 g h i
2 58 j k l
2 17 m n o
2 58 p q r
3 2 s t u
那么我希望找到
user_id start_time A B C
1 45 d e f
1 45 g h i
2 58 j k l
2 58 p q r
3 2 s t u
我一直在想出有点像Conditional selection of data in a pandas DataFrame 的解决方案,但是会找到带有最新start time 的user_id,而不是选择每个用户最大start_time 的表。
当然,如果我手动迭代DataFrame很容易,但效率很低。
感谢您的任何指点。
为了方便以后的读者,这样生成数据框:
columns = ['user_id', 'start_time', 'A', 'B', 'C']
LoL = [
[1, 37, 'a', 'b', 'c'],
[1, 45, 'd', 'e', 'f'],
[1, 45, 'g', 'h', 'i'],
[2, 58, 'j', 'k', 'l'],
[2, 17, 'm', 'n', 'o'],
[2, 58, 'p', 'q', 'r'],
[3, 2, 's', 't', 'u']]
pd.DataFrame = (LoL, columns=columns)
【问题讨论】:
-
我很想知道 groupby() 和 merge() 方法将如何在您的大框架上执行,而不是下面的其他答案。你能试试吗? g = df.groupby('user_id', as_index=False)['start_time'].max() df.merge(g)
标签: python python-3.x pandas