【问题标题】:Iterrate over values in a Pandas Series to replace a value if needed如果需要,迭代 Pandas 系列中的值以替换值
【发布时间】:2025-12-01 13:20:02
【问题描述】:

我正在尝试通过 熊猫系列迭代

如果 '% Renewable' 列中的值大于 '% Renewable' 列的 median,则该值应在新列 'HighRenew' 中分配给 1。否则,该值应保持原样。

新系列'HighRenew'中每一项的值应根据条件是否满足而变化。

for value in Reducedset['% Renewable']: 
    if value >= Reducedset['% Renewable'].median():
       Reducedset['HighRenew'] = 1 
    else:
       Reducedset['HighRenew'] = value       

但是,当 if 循环满足条件时,我只想修改系列中的特定值/元素,而不是整个系列。

谁能给我一些建议?

【问题讨论】:

    标签: python pandas loops dataframe series


    【解决方案1】:

    您可以改用布尔变量。

    median_value = Reducedset['% Renewable'].median()
    Reducedset['% Renewable'][Reducedset['% Renewable'] > median_value] = 1
    

    【讨论】:

    • Top15['HighRenew'] = Top15['HighRenew'].sort_values(ascending=True) 如果我尝试像这样按升序排序,然后查看系列: Top15['HighRenew' ],它不按升序出现吗?任何想法为什么?
    【解决方案2】:

    IIUC 您希望创建一个新列(或修改现有列)以在该值小于中位数时从另一列获取值,如果该值大于或等于则为 1。它可以简单地完成:

    Reducedset['HighRenew'] = Reducedset['% Renewable']
    Reducetset.loc[Reducedset['% Renewable'] < Reducedset['% Renewable'].median(), 'HighRenew'] = 1
    

    或者,您可以使用np.where 一次性完成:

    Reducedset['HighRenew'] = np.where(Reducedset['% Renewable'] >= Reducedset['% Renewable'].median(),
                                       1, Reducedset['% Renewable'])
    

    【讨论】:

    • Top15['HighRenew'] = Top15['HighRenew'].sort_values(ascending=True) 如果我尝试像这样按升序排序,然后查看系列: Top15['HighRenew' ],它不按升序出现吗?任何想法为什么?
    【解决方案3】:

    你可以这样做

    # The median can be calculated just once
    median = Reducedset["% Renewable"].median()
    
    for idx,row in Reducedset.iterrows():
        value = row["% Renewable"]
        if value >= median:
            df.iloc[idx,"% Renewable"] = 1
        # No need to re-assing the value if the condition is not met
    
    

    我假设Reduceset 是您的pandas.dataframe。另外,我是在进入循环之前计算中位数,否则每次满足循环内的条件时,中位数都会发生变化。

    希望这会有所帮助,让我知道进展如何! :D

    【讨论】:

    • Top15['HighRenew'] = Top15['HighRenew'].sort_values(ascending=True) 如果我尝试像这样按升序排序,然后查看系列: Top15['HighRenew' ],它不按升序出现吗?任何想法为什么? @Enriquebet
    • 你能添加一些你的dataframes的例子吗?所以我们可以看看。不看我的第一个想法是可能与您要排序的列的data type有关,也许您需要更改它。
    • 最好把它加到你的帖子里
    • 我在另一篇文章中问过这个问题:*.com/questions/61802149/…