迭代 Pandas 系列中的值以根据需要替换值

Iterrate over values in a Pandas Series to replace a value if needed

我正在尝试迭代 Pandas 系列

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

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

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

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

有人能给我什么建议吗?

您可以改用布尔变量。

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

你可以这样做

# 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

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'])