迭代 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'])
我正在尝试迭代 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'])