【问题标题】:Change Value in Existing Column based on Conditions in Python根据 Python 中的条件更改现有列中的值
【发布时间】:2021-09-17 07:12:26
【问题描述】:

嗨,对于每个分组(基于动物和颜色),我想在检查列中检查 Action = 'See' 是否为 'No'。如果 Action = 'See' 为 'No',则 Check 列中的特定分组将是 'No'。

如果 Action = See and Check = Yes,则保持旧值(参考 Tiger, White)

animallist= df['Animal'].unique().tolist()
colourlist= df['Colour'].unique().tolist()

for i in animallist:
   for j in colourlist:
       df = df[(df['Animal'] == i) & (df['Colour'] == j)]
       df['Check'] = np.where((df['Action'] == 'See') & (df['Check'] == 'no'), 'no', 
                     df['Check'])

【问题讨论】:

    标签: python pandas dataframe conditional-statements pandas-groupby


    【解决方案1】:

    我认为您想要的是:更改“正确?”的值仅当某些其他列具有特定值时才列。否则,请留下“正确?”单独列。您可以创建各种测试来更改列值。这里有两个例子:

    # if Action == View and Colour = Red, then set correct to yes
    # regardless of what Correct? was before
    
    df.loc[(df['Action'] == 'View') & (df['Colour'] == 'Red'), 'Correct?'] = 'Yes'
    
    # similar to above, but change Correct? only if it was not already 'Yes'
    
    df.loc[(df['Action'] == 'View') & (df['Colour'] == 'Red')  & (df['Correct?'] == 'No'), 'Correct?'] = 'Yes'
    
    # create a new correction column, default to No
    # change to yes only under certain conditions
    
    df['new_correct'] = 'No'
    df.loc[(df['Action'] == 'View') & (df['Colour'] == 'Red'), 'new_correct'] = 'Yes'
    
    

    要查找具有特定标准的所有动物,然后根据该标准更改主 df,您可以执行以下操作:

    df_no = df[(df['Colour'] == 'Red') & (df['Action'] == 'View') & (df['Correct?'] == 'No')].drop_duplicates()
    
    df_no = df_no[[df_no['Animal']]   # keep only the 'Animal' column
    
    df = df.merge(df_no, on='Animal', how='left', indicator = 'True').
    df.loc[df['_merge'] == 'both', 'Correct?'] = 'no'
    
    

    你可以用同样的想法做更复杂的事情。例如,您需要弄清楚一个动物是否同时具有“是”和“否”来表示“正确”?那你想做什么。

    【讨论】:

    • 能否根据 Animal 列中的每个分组来做条件? @Hammurabi
    • 是的,例如,您可以测试 df['Animal'] == 'tiger',或者您可以执行更复杂的操作,例如使用 groupby 创建一个新数据框,每只动物只有 1 行,找出你想要的每只动物的值,然后合并到动物上的原始数据框。我不确定你想要达到什么目的。
    • 我正在尝试寻找每个动物分组,如果颜色是红色并且(动作是视图并且正确?是否),那么特定的动物分组(例如老虎)那么它将是否正确吗?老虎中所有行、红色和所有操作的列@Hammurabi
    • 您可以过滤 df 以查找具有特定列值的所有动物分组,然后合并到主 df 以更改正确吗?由动物。我将在答案中添加一个示例。
    • 如果使用filter然后合并的方法,如果那些没有Action: See的动物,会不会在dataframe中?或者有另一个过滤器来过滤没有 Action: See 及其其他 Actions 的动物?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2020-12-01
    相关资源
    最近更新 更多