有条件地将1或0设置为新的Pandas列

时间:2015-10-07 05:29:41

标签: python pandas

一个非常简单的熊猫问题:

如果我有这样的数据框:

   hour
 0  0
 1  1
 2  1
 3  2
 4  2
  ...

我想创建一个新的'午餐'列,如果11< = hour< = 1则值为1,否则,最好和计算最快的方法是什么?

3 个答案:

答案 0 :(得分:7)

你可以使用矢量化方法(减号运算符在这里取消布尔掩码):

df['lunch'] = (-df.hour.isin(range(2,11))).astype(int)

Out[368]:
   hour  lunch
0     0      1
1     1      1
2     1      1
3     2      0
4     2      0

答案 1 :(得分:5)

你可以

In [231]: df['lunch'] = (df['hour']<=11) & (df['hour']<=1)

In [232]: df['lunch']
Out[232]:
0     True
1     True
2     True
3    False
4    False
Name: lunch, dtype: bool

In [233]: df['lunch'].astype(int)
Out[233]:
0    1
1    1
2    1
3    0
4    0
Name: lunch, dtype: int32

答案 2 :(得分:3)

尝试:

>>> df['lunch']=df['hour'].apply(lambda x: 1 if x >= 11 or x <= 1 else 0)
>>> df
   hour  lunch
0     0      1
1     1      1
2     1      1
3     2      0
4     2      0