一个相当简单的pandas问题:
如果我有以下这样的数据框:
hour
0 0
1 1
2 1
3 2
4 2
...
我希望创建一个新的列'lunch',如果hour在11到1之间,则它将具有值1,否则为0。那么,最好且计算速度最快的方法是什么?
你可以
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
你可以采用向量化的方法(减法运算符在这里是用来取反布尔掩码的):
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
尝试:
>>> 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
hour
是在12小时制中的读数,所以它应该环绕。但是如果不能检查am/pm或日期,那么它将永远是真的。 - lvc