Как вы определяете групповые и групповые операции для панд, которые работают с другими столбцами? - PullRequest
0 голосов
/ 31 мая 2018

У меня есть pandas dataframe следующим образом:

+----+-------+-------+
| id | col_1 | col_2 |
+----+-------+-------+
|  1 | 1.2   |     0 |
|  1 | 7.2   |     0 |
|  1 | 12.1  |     1 |
|  1 | 15.2  |     0 |
|  1 | 16.3  |     1 |
|  1 | 21.1  |     0 |
|  1 | 22.2  |     0 |
|  2 | 3     |     0 |
|  2 | 5     |     1 |
+----+-------+-------+

Как я могу создать новый столбец (col_3), используя col_1 и col_2 для каждого идентификатора, где для каждого элемента I в col_1, если существует элемент J вcol_1, где

1) I col_3 равен 1, иначе 0?

Например, col_3 для вышеупомянутогодатафрейм будет:

+----+-------+-------+-------+
| id | col_1 | col_2 | col_3 |
+----+-------+-------+-------+
|  1 | 1.2   |     0 |     0 |
|  1 | 7.2   |     0 |     1 |
|  1 | 12.1  |     1 |     1 |
|  1 | 15.2  |     0 |     1 |
|  1 | 16.3  |     1 |     0 |
|  1 | 21.1  |     0 |     0 |
|  1 | 22.2  |     0 |     0 |
|  2 | 3     |     0 |     1 |
|  2 | 5     |     1 |     0 |
+----+-------+-------+-------+

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Я использую метод NumPy

l=[]
for _,x in df.groupby('id'):
    s=(((x['col_1'].values > x['col_1'].values[:, None]) &(x['col_1'].values <= (x['col_1'].values[:, None] + 10))) & x['col_2'].values.astype(bool)).any(1).astype(int).tolist()
    l.extend(s)


df['col_3']=l
df
Out[400]: 
   id  col_1  col_2  col_3
0   1    1.2      0      0
1   1    7.2      0      1
2   1   12.1      1      1
3   1   15.2      0      1
4   1   16.3      1      0
5   1   21.1      0      0
6   1   22.2      0      0
7   2    3.0      0      1
8   2    5.0      1      0
0 голосов
/ 31 мая 2018

let f - функция, используемая для фильтрации фрейма данных, где i - значение из col_1

def f(i): 
    return (df.col_2 == 1) \
         & (df.col_1 <= i + 10) \
         & (df.col_1 > i)

df['col_3'] = df.apply(lambda x: ((df.id==x.id) & f(x.col_1)).any(), axis=1).astype(int)

выводит вывод:

   id  col_1  col_2  col_3
0   1    1.2      0      0
1   1    7.2      0      1
2   1   12.1      1      1
3   1   15.2      0      1
4   1   16.3      1      0
5   1   21.1      0      0
6   1   22.2      0      0
7   2    3.0      0      1
8   2    5.0      1      0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...