我正在尝试添加一个包含具有以下条件的标签的新列:
- 如果“time”中的值与 dt 之间的时间差 < 2 小时,则为标签 1
- 其他情况为标签 0
我目前的想法:
df = pd.read_csv('./datetimecek.csv')
df['time'] = pd.to_datetime(df['datetime'])
dt = datetime.strptime("19/02/18 19:00", "%d/%m/%y %H:%M")
datetime time
2018/02/19 16:00 2018-02-19 16:00:00
2018/02/19 17:00 2018-02-19 17:00:00
2018/02/19 18:00 2018-02-19 18:00:00
2018/02/19 19:00 2018-02-19 19:00:00
然后我定义了 timedelta
a = timedelta(hours=2)
def label(c):
if dt - df['time'] < a:
return '1'
else:
return '0'
然后
df['label'] = df.apply(label, axis=1)
但我收到错误:“系列的真实值不明确。使用a.empty、a.bool()...
我可以解决这个问题吗?
最佳答案
如果要设置字符串0
和1
:
df['label'] = np.where(dt - df['time'] < a, '1','0')
或者@Dark的替代方案:
df['label'] = (dt - df['time'] < a).astype(int).astype(str)
print (df)
datetime time label
0 2018/02/19 16:00 2018-02-19 16:00:00 0
1 2018/02/19 17:00 2018-02-19 17:00:00 0
2 2018/02/19 18:00 2018-02-19 18:00:00 1
3 2018/02/19 19:00 2018-02-19 19:00:00 1
print (type(df.loc[0, 'label']))
<class 'str'>
<小时/>
如果要设置整数0
和1
:
df['label'] = (dt - df['time'] < a).astype(int)
替代方案:
df['label'] = np.where(dt - df['time'] < a, 1,0)
print (df)
datetime time label
0 2018/02/19 16:00 2018-02-19 16:00:00 0
1 2018/02/19 17:00 2018-02-19 17:00:00 0
2 2018/02/19 18:00 2018-02-19 18:00:00 1
3 2018/02/19 19:00 2018-02-19 19:00:00 1
print (type(df.loc[0, 'label']))
<class 'numpy.int32'>
<小时/>
Is there anyway I can fix this?
是的,需要将 df
更改为 c
才能使用标量:
def label(c):
if dt - c['time'] < a:
return '1'
else:
return '0'
关于python - 如何使用 pandas 创建具有条件日期时间的新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54414814/