pandas копировать значение из одного столбца в другой, если выполняется условие - PullRequest
1 голос
/ 17 февраля 2020

У меня есть фрейм данных:

df = 
col1  col2  col3 
1      2     3
1      4     6
3      7     2

Я хочу отредактировать df, чтобы при значении col1 меньше 2 принимать значение из col3.

* 1007. * Итак, я получу:
new_df = 
col1  col2  col3 
3      2     3
6      4     6
3      7     2

Я пытался использовать assign и df.loc, но это не сработало.

Какой лучший способ сделать это?

Ответы [ 5 ]

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

Как уже упоминалось @ anky_91, используйте np.where для обновления значений 'col1':

df['col1'] = np.where(df['col1'] < df['col2'], df['col3'], df['col1'])
1 голос
/ 17 февраля 2020
df.loc[df["col1"] < 2, "col1"] = df["col3"]
1 голос
/ 17 февраля 2020

Этот наиболее эффективный способ заключается в использовании оператора loc:

mfilter = df["col1"] < df["col2"]
df.loc[mfilter, "col1"] = df.loc[mfilter, "col3"]
1 голос
/ 17 февраля 2020
df['col1'] = df.apply(lambda x: x['col3'] if x['col1'] < x['col2'] else x['col1'], axis=1)
0 голосов
/ 17 февраля 2020

Вы можете посмотреть, используя функцию apply .

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html

df['col1'] = df.apply(lambda c: c['col3'] if c['col1'] < 2 else c['col1'], axis=1)

Редактировать : Извините, я вижу из вашего поддельного результата вы имеете в виду col2, а не int 2. Ответ Eri c Ян решит вашу проблему.

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