【问题标题】:pandas: change the previous cell value of a column based on conditions in another columnpandas:根据另一列中的条件更改一列的前一个单元格值
【发布时间】:2020-01-16 08:07:35
【问题描述】:

我有一个如下所示的 Pandas 数据集: dataset of words and their features

我想将“性别”列中的“x”替换为一个条件,即如果“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,) ()

【问题讨论】:

标签: python-3.x pandas multiple-columns


【解决方案1】:

尝试以下方法:

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'

【讨论】:

  • 非常感谢。这是有效的,但是如果我有一个单词列表而不仅仅是“Mädchen”我需要做同样的事情,我可以问我应该做什么吗?非常感谢您提前
【解决方案2】:
# 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

【讨论】:

    猜你喜欢
    • 2022-11-14
    • 2020-08-20
    • 2020-02-26
    • 1970-01-01
    • 2018-04-15
    • 2021-09-05
    • 2012-10-15
    • 2021-05-21
    • 2019-04-04
    相关资源
    最近更新 更多