Скопировать отдельное значение из одного столбца в другой столбец, где выполняется условие - PullRequest
1 голос
/ 09 мая 2019

У меня есть следующий фрейм данных (назовите его df).

f_col s_col t_col
10   100  0
20   126  0
65   164  0

Если f_col превышает пороговое значение, я хотел бы взять соответствующее значение, расположенное в col2, и скопировать его в col3.

Желательным примером того же кадра данных будет (если порог равен 125):

f_col s_col t_col
10   100  0
20   126  126
65   164  164

Я пытался использовать маски f_col следующим образом:

mask = df.f_col > 125
column_name = 't_col'
df.loc[mask, column_name] = 0

Но это вызывает ошибку, например:

AttributeError: 'int' object has no attribute 'iloc'

Любая помощь будет принята с благодарностью, спасибо.

1 Ответ

3 голосов
/ 09 мая 2019

Вы можете написать с loc, как вы предлагаете:

# Module import
import pandas as pd

# Cols names
col_over_treshold = "f_col"
col_to_copy = "s_col"
col_to_update = "t_col"

# Your dataFrame
df = pd.DataFrame([[10, 100, 0],
                   [20, 126, 0],
                   [65, 164, 0]],
                  columns=[col_over_treshold, col_to_copy, col_to_update])

# Your treshold
threshold = 125

# Process
df.loc[df[col_to_copy] > threshold, col_to_update] = df.s_col

#Show results
print(df)
#    f_col  s_col  t_col
# 0     10    100      0
# 1     20    126    126
# 2     65    164    164

Или можете определить функцию с условием, что вы применяете к вашему фрейму данных:

# Your function to apply
def process(data):
    ret = 0
    if data[col_to_copy] > threshold:
        ret = data.s_col
    return ret


# Processing
df[col_to_update] = df.apply(process, axis=1)

#Show results
print(df)
#    f_col  s_col  t_col
# 0     10    100      0
# 1     20    126    126
# 2     65    164    164
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...