pandas: изменить предыдущее значение ячейки столбца на основе условий в другом столбце - PullRequest
2 голосов
/ 16 января 2020

У меня есть Pandas набор данных, который выглядит следующим образом: набор данных слов и их функций

Я хотел бы заменить "x" в столбце "Gender" условием что если в столбце «Слова» есть список слов, таких как «Mädchen», то в столбце «Пол», в строке предыдущего слова (которая представляет собой число) следует поместить «нейтральный».

например, это:

Gender   Words

 x        10.
 x        Mädchen

Должно стать:

Gender   Words

Neutral   10.
 x        Mädchen

Я уже пробовал np.where так:

Food2_case["Gender"]= np.where(Food2_case.Words.isin(["Mädchen"]), (dropped_data.Words.str.contains('\d',regex= True) == 'A'), "x")

Но я получил эту ошибку:

ValueError: не удалось передать операнды вместе с фигурами (8000,) (275988,) ()

Ответы [ 2 ]

0 голосов
/ 16 января 2020
# Create dataset
data = pd.DataFrame([[0, 0, 0], [10, "Madchen", 5]]).T
data.columns = ["Gender", "Words"]

# Shift one column of interest (take the value of previous row)
data.loc[:, "iswordin"] = data.Words.shift(-1)

# Do what you want to do
data.loc[data.iswordin.isin(["Madchen", "Girl", "boy", "..."]), "Gender"] = "Neutral"

# Now you can drop "iswordin" column which is no longer useful
0 голосов
/ 16 января 2020

Попробуйте следующее:

for index, row in Food2_case.iterrows():
    if(isinstance(row['Words'],str)):
        if('Mädchen' in row['Words']):
            Food2_case['Gender'][index-1] = 'Neutral'

Если я правильно понял ваш вопрос, он должен работать.

[ПРАВИТЬ] Если вы хотите проверить другие слова, отличные от Mädchen, Вы можете сделать следующее:

words_to_check = ['Mädchen', ...]

for index, row in Food2_case.iterrows():
    if(isinstance(row['Words'],str)):
        if(any((x in row['Words'] for x in words_to_check))):
            Food2_case['Gender'][index-1] = 'Neutral'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...