我有一个像这样的数据框:
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以最有效的方式做到这一点?
答案 0 :(得分:1)
使用列表cpmprehension来按col2
的所有唯一值进行循环,使用Series.between
和boolean indexing
按+-10%
进行过滤,并比较所有值是否存在于已创建集合的所有组中由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