Значения в одном столбце на основе условия в другом столбце - PullRequest
0 голосов
/ 29 мая 2019

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

Data = {'group':  ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'],
        'value1': [2, 0, 0, 5, 5, 5, 6, 31, 7, 5, 0, 99],
        'value2': [25, 12 ,15, 11, 36, 3, 65, 6, 89, 8, 74, 5]
        }

current_result = pd.DataFrame(Data, columns = ['group','value1', 'value2'])

Я хочу установить value2 в ноль, если соответствующий value1 равен нулю, сохраняя все остальные значения одинаковыми.Итак, мой желаемый результат будет:

Data = {'group':  ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'],
        'value1': [2, 0, 0, 5, 5, 5, 6, 31, 7, 5, 0, 99],
        'value2': [25, 0 ,0, 11, 36, 3, 65, 6, 89, 8, 0, 5]
        }

current_result = pd.DataFrame(Data, columns = ['group','value1', 'value2'])

Как я могу это сделать?

Ответы [ 6 ]

2 голосов
/ 29 мая 2019

Вы можете умножить на логическую маску - True - это процессы, подобные 1, False, такие как 0, поэтому сравните для не равных 0 по Series.ne:

current_result['value2'] *= current_result['value1'].ne(0)
print (current_result)
   group  value1  value2
0      a       2      25
1      b       0       0
2      c       0       0
3      d       5      11
4      e       5      36
5      f       5       3
6      g       6      65
7      h      31       6
8      i       7      89
9      j       5       8
10     k       0       0
11     l      99       5
2 голосов
/ 29 мая 2019

Использование df.loc[]

current_result.loc[current_result.value1.eq(0),'value2']=current_result.value1
print(current_result)

   group  value1  value2
0      a       2      25
1      b       0       0
2      c       0       0
3      d       5      11
4      e       5      36
5      f       5       3
6      g       6      65
7      h      31       6
8      i       7      89
9      j       5       8
10     k       0       0
11     l      99       5
1 голос
/ 29 мая 2019

Используйте это:

current_result.loc[current_result['value1'] == 0, ['value2']] = 0
0 голосов
/ 29 мая 2019
def change_value(row):
    if row.value1 == 0:
        row.value2 = 0
    return row


current_result = current_result.apply(change_value, axis=1)
0 голосов
/ 29 мая 2019

Без использования каких-либо основных функций Pandas, этот цикл выполняет свою работу:

for index, value in enumerate(current_result["value1"]):
    if value == 0:
        current_result["value2"][index] = 0
0 голосов
/ 29 мая 2019
current_result.loc[current_result['value1'] == 0, 'value2'] = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...