迭代Pandas系列中的值,必要时替换一个值。

问题描述 投票:1回答:3

我想 通过 熊猫系列.

如果列中的一个值 "可再生百分比 大于 中位数 对于 "可再生百分比 列,该值应分配给 1 在一个新的栏目中 'HighRenew'. 否则该值应保持不变。

新系列中每个项目的值 'HighRenew' 但我只是想修改一下,根据是否满足条件而改变。

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

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

谁能给我一些建议?

python pandas loops dataframe series
3个回答
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'])

3
投票

你可以用布尔变量来代替。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.