【问题标题】:Iterate over values in DataFrame column, and update said value if condition is met迭代 DataFrame 列中的值,如果满足条件,则更新所述值
【发布时间】:2021-03-17 14:35:15
【问题描述】:
我有一个包含几列的数据集,我想遍历一个名为“日期”的特定列中的每个值,并在值满足条件时更新该值。
这就是我现在拥有的:
for element in df['date']:
if element > 2000.0:
element = element - 2400.0
elif element < -2000.0:
element = element + 2400.0
这显然不起作用,但我能做些什么来解决这个问题?
编辑:感谢所有回复!
【问题讨论】:
标签:
python
pandas
dataframe
【解决方案1】:
import numpy as np
df['date'] = np.select([df['date'] > 2000, df['date'] < -2000],
[df['date'] - 2400, df['date'] + 2400],
default=df['date'])
【解决方案2】:
使用numpy 和pandas
np.random.seed(4)
df = pd.DataFrame({'Orignal' : pd.Series(list(np.random.randint(1990,2010, 50)) + list(np.random.randint(-2010, -1990 , 50))).sample(15).to_list()})
df['Modefied'] = df.Orignal.apply(lambda x: x - 2400 if x > 2000 else x + 2400 if x < -2000 else x)
df:
Orignal Modefied
0 2008 -392
1 -1992 -1992
2 2004 -396
3 1996 1996
4 -2010 390
5 1995 1995
6 -2002 398
7 -2006 394
8 -1997 -1997
9 -2007 393
10 -2004 396
11 2008 -392
12 -2002 398
13 2006 -394
14 -2002 398
【解决方案3】:
if element > 2000.0:
df['date'] = element - 2400.0
elif element < -2000.0:
df['date'] = element + 2400.0
【解决方案4】:
如果你真的想用循环来做,你可以
只需使用像数组这样的索引:
import pandas as pd
df = pd.DataFrame()
df['date'] = [-3000,3000,1000,5000]
for i in range(len(df['date'])):
if df['date'][i] > 2000:
df['date'][i] = df['date'][i] - 2400
elif df['date'][i] < -2000:
df['date'][i] = df['date'][i] + 2400
df
但我会使用 .loc 使用更简单的方法:
df['date'].loc[df['date'] > 2000] = df['date'] - 2400
df['date'].loc[df['date'] <-2000] = df['date'] + 2400
df