python - 保持具有最大重叠的相似行 Pandas 数据框

标签 python pandas duplicates overlap

我有一个问题 看起来像(示例)的数据框:

   index  ID   time     value
   0      1     2h       10
   1      1     2.15h    15
   2      1     2.30h    5
   3      1     2.45h    24
   4      2     2.15h    6
   5      2     2.30h    12
   6      2     2.45h    18
   7      3     2.15h    2
   8      3     2.30h    1

我想保持 ID 行重叠的最大数量。 所以:

   index  ID   time    value
   1      1     2.15h   15
   2      1     2.30h    5
   4      2     2.15h    6
   5      2     2.30h   12
   7      3     2.15h    2
   8      3     2.30h    1

我知道我可以创建一个具有唯一时间的 df,然后将每个 ID 单独合并到它,然后保留每次都填充所有 ID 的所有行,但这是非常不切实际的。我看过但没有找到可能更聪明的方法的答案。有人知道如何使它更实用吗?

最佳答案

使用:

cols = df.groupby(['ID', 'time']).size().unstack().dropna(axis=1).columns

df = df[df['time'].isin(cols)]
print (df)
   ID   time  value
1   1  2.15h     15
2   1  2.30h      5
4   2  2.15h      6
5   2  2.30h     12
7   3  2.15h      2
8   3  2.30h      1

详细信息:

首先通过groupby聚合DataFramesize , 然后通过 unstack reshape - NaN 是为非重叠值创建的:

print (df.groupby(['ID', 'time']).size().unstack())
time  2.15h  2.30h  2.45h   2h
ID                            
1       1.0    1.0    1.0  1.0
2       1.0    1.0    1.0  NaN
3       1.0    1.0    NaN  NaN

使用 dropna 删除列并获取列名:

print (df.groupby(['ID', 'time']).size().unstack().dropna(axis=1))
time  2.15h  2.30h
ID                
1       1.0    1.0
2       1.0    1.0
3       1.0    1.0

最后一个过滤器列表由 isinboolean indexing :

df = df[df['time'].isin(cols)]

关于python - 保持具有最大重叠的相似行 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51857620/

相关文章:

java - 对象的 ArrayList,比较对象并查找重复项,每个重复项仅将对象添加到新的 ArrayList 一次

Python: "as"关键字简写

python - 在 Tensorflow 中重新训练模型

python - 当我最初不知道数据类型时,如何快速更改 100 多个数据帧的格式?

python - 在 pandas 中使用回归?

sql - 如何查找多列中的重复项?

python - 打开和创建记录不工作 TreeView odoo/openerp

python - 将 Cookie 添加到 ZSI 帖子

python - 使用查询字符串过滤多重索引

pyspark - 如何在pyspark数据框中查找重复的列值