Создайте словарь на основе условий для фрейма данных pandas - PullRequest
0 голосов
/ 05 июня 2019

Допустим, у меня есть простой фрейм данных, такой как:

data = {'Col_A' : [0.75, 0.25, 0.25, 0.75, 0.75, 0.25], 'Col_B' : [2, 2.5, 1, 1.5, 3, 3.5]}
df = pd.DataFrame(data)

, что приводит к следующему:

   Col_A  Col_B
0   0.75    2.0
1   0.25    2.5
2   0.25    1.0
3   0.75    1.5
4   0.75    3.0
5   0.25    3.5

То, что я хотел бы сделать, это использовать условие для обоих Col_Aи Col_B и итерация по каждой строке должна соответствовать условиям, я хотел бы добавить эту строку в словарь.

Итак, скажем, если Col_A < 0.5 и Col_B > 2 я хочу добавитьсловарь с Col_B и его соответствующим значением.

В приведенном выше случае я хочу, чтобы словарь был возвращен как {'Col_B : 3.0, 'Col_B' : 2.5} Я знаю, Col_B здесь повторяется, но у меня есть df измного много столбцов и много строк, и я в основном пытаюсь понять, как часто что-то происходит среди нескольких вещей.

Код, который я ожидал бы использовать, будет выглядеть примерно так:

dict['Col_B'] = np.where((df['Col_A'] < 0.5) and (df['Col_B'] > 1.5), df['Col_B'])

Очевидно, я знаю, что это не сработает, но я думал именно об этом.Любая помощь будет отличным приветствием.

1 Ответ

1 голос
/ 06 июня 2019

На основании условий Col_A и Col_B вы хотите получить значения из Col_B?Вы можете сделать это:

# identify rows with matching conditions
idx = (df.Col_A < 0.5) & (df.Col_B > 2)

# put values from Col_B into your dictionary
dict["Col_B"] = list(df.loc[idx, "Col_B"])

Это каждый раз перезаписывает «Col_B» в вашем словаре, но вы можете изменить это, добавив вместо этого, если это необходимо (я не уверен, чего вы хотите достичь здесь, поэтому я нене знаю, нужно ли добавлять приложение для вашего приложения).

Вы сказали:

Я в основном пытаюсь понять, как часто что-то происходит среди нескольких вещей

Если вы просто хотите сосчитать экземпляры Col_A <0.5 и Col_B> 2, просто потяните размер

numEvents = df.loc[idx, "Col_B"].size
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...