Как добавить список после зацикливания столбца данных? - PullRequest
1 голос
/ 29 марта 2019

Предполагая, что у меня есть следующий фрейм данных:

df = pd.DataFrame({ 'ids' : ['1', '1', '1', '1', '2', '2', '2', '3', '3'],
        'values' : ['5', '8', '7', '12', '2', '1', '3', '15', '4']
        }, dtype='int32')



ids values
1   5
1   7
1   8
1   12
2   1
2   3
2   2
3   4
3   15

Что я хотел бы сделать, это перебрать столбец values и проверить, какие значения больше 6 и соответствующий идентификатор из *Столбец 1005 * должен быть добавлен в пустой список.

Даже если идентификатор (скажем, 3) имеет несколько значений и из этих нескольких значений (4 и 15) только одно значение больше 6, я бы хотел, чтобы соответствующий идентификатор был добавлен в список.

Пример: Предполагая, что мы запустим цикл над вышеупомянутым фреймом данных df, я бы хотел получить следующий вывод:

more = [1, 3]
less = [2]

с more =[] и less = [] будучи предварительно инициализированными пустыми списками

Что у меня есть до сих пор: Я пытался реализовать то же самое, но, конечно, я делаю какую-то ошибку.Код у меня есть:

less = []
more = []
for value in df['values']:
    for id in df['ids']:
        if (value > 6):
            more.append(id)
        else:
            less.append(id)

Ответы [ 2 ]

4 голосов
/ 29 марта 2019

Используйте groupby и логическое индексирование для создания ваших списков. Это будет намного быстрее, чем зацикливание:

g = df.groupby('ids')['values'].max()
mask = g.gt(6)
more = g[mask].index.tolist()
less = g[~mask].index.tolist()

print(more)
print(less)

[1, 3]
[2]
0 голосов
/ 29 марта 2019

Вы можете использовать индексирование по фреймам данных, чтобы вычистить все те индексы, которые больше 6, и создать набор уникальных индексов, используя:

setA = set(df[df['values'] > 6]['ids'])

Это создаст набор всех индексов в кадре данных:

setB = set(df['ids'])

Теперь

more = list(setA)

, а для less возьмите установленную разницу:

less = list(setB.difference(setA))

Вот и все!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...