Как изменить значения столбца данных pandas, отфильтрованные по значениям других столбцов - PullRequest
0 голосов
/ 24 апреля 2019

Как я могу написать приведенный ниже код R на Python?

df = data.frame( a=c("apple", "banana", "orange", "apple"),
                 b=c(NA, 3, NA, 5)
                 c=c(2, 1, 0, NA)
                 d=c(1, NA, NA, 3) )

df[ df$a =="apple" & !is.na(df$b), "c"] = df[ df$a =="apple" & !is.na(df$b), "d"]

Я попробовал следующее и получил сообщение TypeError: объекты 'Series' являются изменяемыми, поэтому они не могут быть хешированы, ошибка

# Python code that receives an error
# df is Pandas DataFrame
df.loc[ (df.a=="apple") & ~df.b.isnull(), 'c'] = df.loc[ (df.a=="apple") & ~df.b.isnull(), 'd']

df['c'] = df.apply( lambda row: row['d'] if row['a']=="apple" & ~np.isnan(row['b']) else row['c'])

Ожидаемый результат: df ['c'] будет иметь [2, 1, 0, 3]

1 Ответ

1 голос
/ 24 апреля 2019

В пандах

df.loc[ (df.a =="apple") & (df.b.notnull()), "c"]=df.d
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...