【问题标题】: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】:

    使用numpypandas

    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
      

      【讨论】:

        猜你喜欢
        • 2014-02-11
        • 2019-06-05
        • 2019-04-06
        • 1970-01-01
        • 2017-08-29
        • 2020-08-18
        • 2022-10-07
        • 2019-03-08
        • 2021-06-15
        相关资源
        最近更新 更多