从某个范围内的列中找到一个固定值,并在熊猫数据框中找到另一列的每个唯一值

时间:2019-05-21 06:25:40

标签: python pandas dataframe

我有一个像这样的数据框:

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以最有效的方式做到这一点?

1 个答案:

答案 0 :(得分:1)

使用列表cpmprehension来按col2的所有唯一值进行循环,使用Series.betweenboolean 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