以最大重叠保持数据帧中的相似行

2024-04-26 02:35:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有个问题要问 如下所示的数据帧(示例):

   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单独合并到df中,然后保持每次都填充了所有ID的所有行,但这是非常不切实际的。我看了,但没有找到一个可能的更聪明的方法的答案。有人知道如何使这个更实用吗?你知道吗


Tags: 数据方法答案id示例df数量index
1条回答
网友
1楼 · 发布于 2024-04-26 02:35:48

用途:

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

详细信息:

首先通过^{}^{}聚合DataFrame,然后通过^{}重塑-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

删除带有^{}的列并获取列名:

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

以及^{}^{}的最后一个筛选器列表:

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

相关问题 更多 >