pandas - 在 Pandas Dataframe 中的 groupby 中删除和存储最大的
问题描述
我有一个这样的数据框:
userid watched timestamp
15 553938 M1 1499371200000
15390 527638 M2 1599731200000
15389 521638 M2 1399901200000
15388 521638 M3 1439841200000
15387 553938 M4 1499521200000
对于每个用户,我需要在timestamp
列下找到“最新”,删除相应的行,并将该行存储在新的数据框中。
一种方法是使用DataFrame.iterrows()遍历所有行并处理每一行。但是,我想知道是否有更有效的方法来执行此任务
解决方案
sort_values
您可以按and 创建的布尔掩码进行排序duplicated
和过滤boolean indexing
:
df = df.sort_values('timestamp', ascending=False)
mask = df.duplicated('userid')
df1 = df[mask]
df2 = df[~mask]
print (df1)
userid watched timestamp
15 553938 M1 1499371200000
15389 521638 M2 1399901200000
print (df2)
userid watched timestamp
15390 527638 M2 1599731200000
15387 553938 M4 1499521200000
15388 521638 M3 1439841200000
或通过获取索引DataFrameGroupBy.idxmax
并通过选择loc
,删除索引使用drop
:
idx = df.groupby('userid')['timestamp'].idxmax()
df1 = df.drop(idx)
#alternative
#df1 = df.loc[~df.index.isin(idx)]
df2 = df.loc[idx]
print (df1)
userid watched timestamp
15 553938 M1 1499371200000
15389 521638 M2 1399901200000
print (df2)
userid watched timestamp
15388 521638 M3 1439841200000
15390 527638 M2 1599731200000
15387 553938 M4 149952120000
推荐阅读
- python - Python:ValueError: scatter 需要 y 列为数字?
- java - 获取 org.apache.maven.plugins:maven-jar-plugin:2.3.2 或其依赖项之一无法解决错误
- c - 以某些数字打印数字
- python - “break”会杀死一个运行while循环的线程吗?
- python - 使用多列的 Pandas groupby 函数
- python-3.x - flask-sqlalchemy db.Model._decl_class_registry.values() 和 db.metadata.tables 不一致
- libgdx - libgdx 音乐兼容性
- mysql - 如何将同一张表中的 SUM() 和 COUNT() 表更新到不同的列
- python - Order by 有时在我的查询中不起作用
- sharpdx - 我找不到为什么在 SharpDX 中没有释放内存