Python 3.x 按一列分组并从另一列中查找重复项,然后在Python中返回指示
给定一个小数据集Python 3.x 按一列分组并从另一列中查找重复项,然后在Python中返回指示,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,给定一个小数据集df,如下所示,我需要groupbyfloor,在room中找到重复的数据集,然后返回Pandas中的check列: id floor room 0 1 1 101.0 1 2 1 102.0 2 3 2 201.0 3 4 2 201.0 4 5 2 202.0 5 6 3 NaN 6 7 3 201.0 7 8 3 301.0 我希
df
,如下所示,我需要groupbyfloor
,在room
中找到重复的数据集,然后返回Pandas中的check
列:
id floor room
0 1 1 101.0
1 2 1 102.0
2 3 2 201.0
3 4 2 201.0
4 5 2 202.0
5 6 3 NaN
6 7 3 201.0
7 8 3 301.0
我希望使用以下代码,因为还有许多其他列需要检查:
a = np.where(condition, None, 'duplicates')
# b = np.where(df.area.str.contains('^\d+$', na = True), None,
# 'area is not a numbers')
f = (lambda x: ';'.join(y for y in x if pd.notna(y))
if any(pd.notna(np.array(x))) else np.nan )
df['check'] = [f(x) for x in zip(a)]
预期结果如下:
id floor room check
0 1 1 101.0 NaN
1 2 1 102.0 NaN
2 3 2 201.0 duplicates
3 4 2 201.0 duplicates
4 5 2 202.0 NaN
5 6 3 NaN NaN
6 7 3 201.0 NaN
7 8 3 301.0 NaN
如何修改条件代码?提前感谢您的帮助。您可以将
np.where
与复制的一起使用。您可以查找['floor',room']
子集的重复项,而不是按楼层分组,然后传递keep=False
以标记这两个重复项:
df['check'] = np.where(df.duplicated(['floor', 'room'], keep = False), 'duplicates', np.NaN)
df
Out[1]:
id floor room check
0 1 1 101.0 nan
1 2 1 102.0 nan
2 3 2 201.0 duplicates
3 4 2 201.0 duplicates
4 5 2 202.0 nan
5 6 3 NaN nan
6 7 3 201.0 nan
7 8 3 301.0 nan
您可以使用转换:
df["count"] = df.groupby(["floor", "room"]).transform("count")
结果:
id floor room count
0 1 1 101.0 1.0
1 2 1 102.0 1.0
2 3 2 201.0 2.0
3 4 2 201.0 2.0
4 5 2 202.0 1.0
5 6 3 NaN NaN
6 7 3 201.0 1.0
7 8 3 301.0 1.0
可能使用None
代替np.NaN
?