Изменить значения в столбцах данных в зависимости от значений других столбцов (значения поступают из списков) - PullRequest
0 голосов
/ 02 января 2019

У меня есть фрейм данных в python, например этот:

  col1 col2 col3 col4
0    A    C    B    D
1    C    E    E    A
2    E    A    E    A
3    A    D    D    D
4    B    B    B    B
5    D    D    D    D
6    F    F    A    F
7    E    E    E    E
8    B    B    B    B

Код для создания кадра данных:

d = {'col1':['A','C','E','A','B','D','F','E','B'], 'col2':['C','E','A','D','B','D','F','E','B'],
              'col3':['B','E','E','D','B','D','A','E','B'], 'col4':['D','A','A','D','B','D','F','E','B']}
df = pd.DataFrame(data=d)

Пусть list1 будет ['A', 'C', 'E'], а list2 будет ['B', 'D', 'F']. Что я хочу, это следующее: если в col1 остается элемент из списка list1, а в одном из col2-col4 остается элемент из списка list2, то я хочу удалить последний элемент (поэтому замените его на '').

Я попробовал df['col2'].loc[(df['col1'] in list1) & (df[['col2'] in list2)]='', что не совсем то, что я хочу, но, по крайней мере, идет в правильном направлении, к сожалению, это не работает. Может ли кто-нибудь помочь, пожалуйста?

Это мой ожидаемый результат:

  col1 col2 col3 col4
0    A         B    D
1    C    E    E    A
2    E    A    E    A
3    A         D    D
4    B    B    B    B
5    D    D    D    D
6    F    F    A    F
7    E    E    E    E
8    B    B    B    B

1 Ответ

0 голосов
/ 02 января 2019

pd.DataFrame.loc - это метод pd.DataFrame, поэтому используйте его с вашим фреймом данных, а не с серией.Кроме того, вы можете проверить критерии для нескольких серий с помощью pd.DataFrame.any:

m1 = df['col1'].isin(list1)
m2 = df[['col2', 'col3', 'col4']].isin(list2).any(1)

df.loc[m1 & m2, 'col2'] = ''

Результат:

print(df)

  col1 col2 col3 col4
0    A         B    D
1    C    E    E    A
2    E    A    E    A
3    A         D    D
4    B    B    B    B
5    D    D    D    D
6    F    F    A    F
7    E    E    E    E
8    B    B    B    B
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...