基于条件创建一个新列,其中包含python中另一列的值

时间:2016-06-07 15:52:42

标签: python if-statement pandas dataframe

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

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列中值将为零。我已经尝试了以下代码,但它不能像我想的那样工作(它在不考虑else语句的情况下打印与df2.Value相同的值);

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

知道这有什么问题吗?

1 个答案:

答案 0 :(得分:3)

使用你的布尔条件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