итерация для выполнения вычислений для определенного столбца в pandas кадре данных - PullRequest
1 голос
/ 28 февраля 2020

Я работаю с большим pandas фреймом данных, в котором я создал новый пустой столбец. То, что я хочу сделать, чтобы перебрать каждое значение в указанном столбце c фрейма данных, выполнить логическую проверку, а затем присвоить значение новому столбцу на основе выходных данных проверки значения.

Я думаю, мне нужно использовать a для l oop, чтобы проверить индивидуальное содержимое каждой ячейки в указанном мной столбце. Проблема в том, что я не могу понять правильный синтаксис для правильной записи для l oop, который проверяет значения в указанном столбце c. Это то, что у меня есть.


call_info['% of Net Capital'] = call_info['Call Amount'] / call_info['Net Capital']

for (ColumnData) in call_info['Call Amount']:
    columnSeriesObj = call_info[ColumnData]
    if columnSeriesObj.any - call_info['Excess Deficit'].any > 0:
       call_info['Sufficient Excess?'][ColumnData] = True
    else:
        call_info['Sufficient Excess?'][ColumnData] = False

Я получаю KeyError: 38749372

call_info - это pandas фрейм данных. Я пытаюсь сравнить call_info ['Call Amount'] с call_info ['Excess Deficit'] и добавить значение true или false в call_info ['Sufficient Excess?']

** Обновлен, чтобы включить пример мой фрейм данных и ожидаемый вывод

Это фрагмент большего файла CSV: CSV File Output

Я загрузил данные из этого файла CSV с помощью openpyxl load_workbook Оттуда я преобразовал данные в Pandas Dataframe, используя следующий код:

from itertools import islice
data = sheet_ranges.values
cols = next(data)[1:]
data = list(data)
idx = [r[0] for r in data]
data = (islice(r, 1, None) for r in data)
df = pd.DataFrame(data, index=idx, columns=cols)

Примером ожидаемого вывода является столбец в кадре данных, который выглядит следующим образом: Expected output

Мне удалось сделать это в Excel, но я хочу автоматизировать процесс

1 Ответ

1 голос
/ 28 февраля 2020

Я сделал некоторые демонстрационные данные, которые, как мы надеемся, представляют проблему.

import numpy as np
import pandas as pd

np.random.seed(0)

df = pd.DataFrame(np.random.randint(1000, size = [20, 2]), columns = ['call_amount', 'excess_deficit'])

Затем вы можете использовать следующий код, чтобы получить результат, который вы ищете.

df['sufficient_excess'] = (df['call_amount'] - df['excess_deficit']) > 0

, который дает

    call_amount excess_deficit  sufficient_excess
0           684            559               True
1           629            192               True
2           835            763               True
3           707            359               True
4             9            723              False
5           277            754              False
6           804            599               True
7            70            472              False
8           600            396               True
9           314            705              False

Если вам нужно, чтобы изменение результата имело Yes вместо True, позвольте мне сейчас

...