Python 基于相关id子集数据帧的多个条件
我有一个名为Python 基于相关id子集数据帧的多个条件,python,pandas,Python,Pandas,我有一个名为df的数据框,它有一个id列和一个related\u id列。如果相关的_id不为null,则表示存在桌面版本和移动版本。 我想将此数据集子集,以便在存在相关id的情况下仅保留桌面实例。但是,也存在这样的情况,即可能存在具有相关id的移动观测,该id也是移动观测(ID7和ID8是示例)。在这种情况下,我只想保留其中一个观察结果 输入: id related_id type 1e 2e desktop 2e 1e mobile 3x NaN
df
的数据框,它有一个id
列和一个related\u id
列。如果相关的_id不为null,则表示存在桌面版本和移动版本。
我想将此数据集子集,以便在存在相关id的情况下仅保留桌面实例。但是,也存在这样的情况,即可能存在具有相关id的移动观测,该id也是移动观测(ID7和ID8是示例)。在这种情况下,我只想保留其中一个观察结果
输入:
id related_id type
1e 2e desktop
2e 1e mobile
3x NaN desktop
4w 6w desktop
5m NaN mobile
6w 4w mobile
7q 8q mobile
8q 7q mobile
输出:
id related_id type
1e 2e desktop
3x NaN desktop
4w 6w desktop
5m NaN mobile
7q 8q mobile
如何在pandas中执行此操作?您可以
np.在axis=1
上对id
和related\u id
进行排序,并创建用于分组的辅助序列,然后使用辅助字典计算权重的idxmin
:
s = pd.Series(map(tuple,np.sort(df[['id','related_id']].fillna(''),axis=1)))
d= {'desktop':1,'mobile':2}
out = df.loc[df['type'].map(d).groupby(s,sort=False).idxmin()]
我刚刚编辑了我的问题来更新ID。有些ID实际上是字符,而不是字符integers@Eisen更新了我的答案
print(out)
id related_id type
0 1e 2e desktop
2 3x NaN desktop
3 4w 6w desktop
4 5m NaN mobile
6 7q 8q mobile