从连续的日期时间变量创建分类变量
Making a categorical variable from a continuous datetime variable
我正在尝试从连续日期时间变量创建分类变量。
基本上如果他们在15和25之间,那么Age_category = 1,如果他们在25和35之间,那么Age_category = 2。
我知道了,所以我可以提出一个条件,这个有效:
df.loc[(df['Age_days'] > timedelta(days=(25*365)), 'Age2')] = '1'
当我尝试提出两个条件时,它失败了:
df.loc[(df['Age_days'] > timedelta(days=(15*365)) & (df['Age_days'] <= timedelta(days=(25*365)), 'Age_cat'))] = '1'
我得到的错误是它不喜欢使用“&”:
TypeError: unsupported operand type(s) for &: 'datetime.timedelta' and 'tuple'
我试过用 'and' 替换 & 但它也不喜欢这样:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
知道我应该如何解决这个问题吗?
对于 Pandas,您应该使用 Pandas 方法而不是 datetime
模块。
在这种情况下,您可以使用 NumPy 将 timedelta
值转换为 float
,然后使用 pd.cut
对您的年龄进行分类。默认情况下,pd.cut
包含在每个范围的右侧。
df = pd.DataFrame({'Age': [10, 15, 17, 20, 25, 30, 35, 40]})
df['Age'] = pd.to_timedelta(df['Age'], unit='Y')
df['Category'] = pd.cut(df['Age'] / np.timedelta64(1, 'Y'), [15, 25, 35], labels=[1, 2])
print(df)
Age Category
0 3652 days 10:12:00 NaN
1 5478 days 15:18:00 NaN
2 6209 days 02:56:24 1.0
3 7304 days 20:24:00 1.0
4 9131 days 01:30:00 1.0
5 10957 days 06:36:00 2.0
6 12783 days 11:42:00 2.0
7 14609 days 16:48:00 NaN
然后您可以删除空值并将类别转换为 int
(如果需要)。
我正在尝试从连续日期时间变量创建分类变量。
基本上如果他们在15和25之间,那么Age_category = 1,如果他们在25和35之间,那么Age_category = 2。
我知道了,所以我可以提出一个条件,这个有效:
df.loc[(df['Age_days'] > timedelta(days=(25*365)), 'Age2')] = '1'
当我尝试提出两个条件时,它失败了:
df.loc[(df['Age_days'] > timedelta(days=(15*365)) & (df['Age_days'] <= timedelta(days=(25*365)), 'Age_cat'))] = '1'
我得到的错误是它不喜欢使用“&”:
TypeError: unsupported operand type(s) for &: 'datetime.timedelta' and 'tuple'
我试过用 'and' 替换 & 但它也不喜欢这样:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
知道我应该如何解决这个问题吗?
对于 Pandas,您应该使用 Pandas 方法而不是 datetime
模块。
在这种情况下,您可以使用 NumPy 将 timedelta
值转换为 float
,然后使用 pd.cut
对您的年龄进行分类。默认情况下,pd.cut
包含在每个范围的右侧。
df = pd.DataFrame({'Age': [10, 15, 17, 20, 25, 30, 35, 40]})
df['Age'] = pd.to_timedelta(df['Age'], unit='Y')
df['Category'] = pd.cut(df['Age'] / np.timedelta64(1, 'Y'), [15, 25, 35], labels=[1, 2])
print(df)
Age Category
0 3652 days 10:12:00 NaN
1 5478 days 15:18:00 NaN
2 6209 days 02:56:24 1.0
3 7304 days 20:24:00 1.0
4 9131 days 01:30:00 1.0
5 10957 days 06:36:00 2.0
6 12783 days 11:42:00 2.0
7 14609 days 16:48:00 NaN
然后您可以删除空值并将类别转换为 int
(如果需要)。