【问题标题】:Creating a new column based on condition with values from another column in python使用python中另一列的值根据条件创建新列
【发布时间】:2016-10-07 15:06:33
【问题描述】:

我有一个数据框,想根据条件创建一个新列,如果满足某个条件,则在这个新列中该值将来自另一列,否则它需要为零。 原始数据框是;

df2 = pd.read_csv('C:\Users\ABC.csv')
df2['Date'] = pd.to_datetime(df2['Date'])
df2['Hour'] = df2.Date.dt.hour
df2['Occupied'] = ''
Date                 Value  Hour    Occupied
2016-02-02 21:00:00  0.6    21  
2016-02-02 22:00:00  0.4    22  
2016-02-02 23:00:00  0.4    23  
2016-02-03 00:00:00  0.3    0   
2016-02-03 01:00:00  0.2    1   
2016-02-03 02:00:00  0.2    2   
2016-02-03 03:00:00  0.1    3   
2016-02-03 04:00:00  0.2    4   
2016-02-03 05:00:00  0.1    5   
2016-02-03 06:00:00  0.4    6

如果 df2.Hour 大于或等于 9,我希望在 Occupied 列中具有与 df2.Value 相同的值,否则 Occupied 列中的值将为零。我已经尝试了以下代码,但它没有按我的意愿工作(它打印与 df2.Value 相同的值而不考虑 else 语句);

for i in df2['Hour']:
    if i >= 9:
        df2['Occupied'] = df2.Value
    else:
        df2['Occupied'] = 0

知道这有什么问题吗?

【问题讨论】:

    标签: python if-statement pandas dataframe


    【解决方案1】:

    where 与您的布尔条件一起使用,这将设置所有行值,而不是逐行迭代:

    In [120]:
    df2['Occupied'] = df2['Value'].where(df2['Hour'] >= 9, 0)
    df2
    
    Out[120]:
                     Date  Value  Hour  Occupied
    0 2016-02-02 21:00:00    0.6    21       0.6
    1 2016-02-02 22:00:00    0.4    22       0.4
    2 2016-02-02 23:00:00    0.4    23       0.4
    3 2016-02-03 00:00:00    0.3     0       0.0
    4 2016-02-03 01:00:00    0.2     1       0.0
    5 2016-02-03 02:00:00    0.2     2       0.0
    6 2016-02-03 03:00:00    0.1     3       0.0
    7 2016-02-03 04:00:00    0.2     4       0.0
    8 2016-02-03 05:00:00    0.1     5       0.0
    9 2016-02-03 06:00:00    0.4     6       0.0
    

    【讨论】:

      猜你喜欢
      • 2022-01-07
      • 1970-01-01
      • 2022-12-16
      • 2021-12-02
      • 2023-03-25
      • 2021-10-02
      • 2018-03-06
      • 2020-04-16
      • 2022-08-12
      相关资源
      最近更新 更多