Как перебрать DataFrame строк и применить, если условие для результата - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь перебрать кадр данных, используя условие if, чтобы вернуть значение, если строка равна строке в i-й позиции в кадре данных.

Я получаю следующую ошибку, выполнив пример кода

(`ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().`):
 df = {'step_ID':[1,1,2,2,3,3,4,4], 'step_name':['CC_Dchg', 'CC_Dchg', 'Rest', 'Rest', 'CC_Chg', 
    'CC_Chg', 'Rest', 'Rest']}
    df = pd.DataFrame(df)

    chg_step = []
    a = []

    for i in df:
        if df['step_name'] == 'CC_Chg':
            a = SiO_1['step_ID']
            chg_step = chg_step + a
        else:
            continue

Какой правильный синтаксис для проверки, если df['step_name'] == 'CC_Chg' Истина?

1 Ответ

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

Если я правильно понимаю, вам нужно step_ID строк, где step_name равно заданному значению. В pandas вам не нужно писать свои собственные циклы (или только в экстремальных ситуациях). Вместо этого здесь есть альтернатива:

# step by step

# do the comparison step_name == X for each row.
# The result is a boolean pandas Series
mask = df['step_name'] == 'CC_Chg' 
# The boolean pandas series can be used to select only some rows.
# Then, we can retrieve the step_ID column for those rows only.
# The result is again a pandas Series
chg_step_series = df[mask].step_ID # this is a series
# A pandas series can be converted to a numpy array using values,
# and then a list by calling tolist()
chg_step_series.values.tolist() # this is a list: [3,3]

Или в одну строку:

chg_step = df[df.step_name == 'CC_Chg'].step_ID.values.tolist()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...