我有一个这样的数据框:
df
col1 col2
1 50000
1 2000
2 51000
3 100
3 5000
3 50500
4 200
4 51500
5 49000
我想为每个 col1 唯一值出现的每个 col1 值标识正负 10% 的值。
最终输出应该是这样的
col1 col2
1 50000
2 51000
3 50500
4 51500
5 49000
如果 50000 附近的值以外的其他值存在并且在正负 10% 范围内,则添加值在 50000 左右的值
如何以最有效的方式使用 pandas/python 做到这一点?
使用 list cpmrehension for loop by 的所有唯一值col2
,+-10%
用Series.between
和过滤boolean indexing
并比较所有组中是否存在所有值,并使用 set created by col1
。最后过滤器Series.isin
:
s = set(df['col1'])
print (s)
{1, 2, 3, 4, 5}
a = [x for x in df['col2'].unique()
if set(df.loc[df['col2'].between(x - x *.1, x + x*.1), 'col1']) == s]
print (a)
[50000, 51000, 50500, 51500, 49000]
df = df[df['col2'].isin(a)]
print (df)
col1 col2
0 1 50000
2 2 51000
5 3 50500
7 4 51500
8 5 49000
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句