如何创建二进制列 timedelta 和 bin 列表
How to create a binary column a timedelta and a list of bins
我想从一个列表和一个时间增量创建一个二进制列。这是我目前所拥有的:
weather_list = ['5', '15', '30', '40'}
for i in weather_list:
col = 'r_' + i
epi.data[col] = np.where((help.data['help_beg_date'] + timedelta(float(i) -
1)) >= help.data['HL_DATE'], 1, 0)
但是,此输出是累积的。例如;如果观察距离 help_beg_dt
16 天,它将 return 它来自列 r_5
、r_15
和 r_30
的值作为 0、1、1, 1. 我需要输出列值为 0、1、0、0。1 值低于 r_30
但高于 r_15。
我正在考虑创建另一个列表来获得 i 的下一个序列;所以我可以使用大于和小于表达式。我假设你可能只用一个列表就可以做到这一点。
在我看来,您的问题是 'binning' 基于 windows 列表的列的变体。这通常通过 pd.cut
来实现。对你来说,你正在装箱的系列是
datediff = help.data['HL_DATE'] - help.data['help_beg_date']
并且您希望根据天气列表将其分类。首先我们需要将这些时间增量转换为天;这是通过系列的 dt.days
方法获得的(dt
是 datetime 的缩写)。然后我们可以使用 pd.cut
来构建这样的箱子(注意我在天气列表中添加了 0,以使 windows 有效):
weather_list = [0, 5, 15, 30, 40]
bins = pd.cut(datediff.dt.days, weather_list)
bins
0 (0, 5]
1 (5, 15]
2 (15, 30]
3 (15, 30]
dtype: category
Categories (4, object): [(0, 5] < (5, 15] < (15, 30] < (30, 40]]
最后可以将其转换为指标列 pd.get_dummies
:
indicators = pd.get_dummies(bins)
indicators
(0, 5] (5, 15] (15, 30] (30, 40]
0 1 0 0 0
1 0 1 0 0
2 0 0 1 0
3 0 0 1 0
您可以使用
将这些添加到您的数据框中
pd.concat([epi.data,indicators],axis = 1)
我想从一个列表和一个时间增量创建一个二进制列。这是我目前所拥有的:
weather_list = ['5', '15', '30', '40'}
for i in weather_list:
col = 'r_' + i
epi.data[col] = np.where((help.data['help_beg_date'] + timedelta(float(i) -
1)) >= help.data['HL_DATE'], 1, 0)
但是,此输出是累积的。例如;如果观察距离 help_beg_dt
16 天,它将 return 它来自列 r_5
、r_15
和 r_30
的值作为 0、1、1, 1. 我需要输出列值为 0、1、0、0。1 值低于 r_30
但高于 r_15。
我正在考虑创建另一个列表来获得 i 的下一个序列;所以我可以使用大于和小于表达式。我假设你可能只用一个列表就可以做到这一点。
在我看来,您的问题是 'binning' 基于 windows 列表的列的变体。这通常通过 pd.cut
来实现。对你来说,你正在装箱的系列是
datediff = help.data['HL_DATE'] - help.data['help_beg_date']
并且您希望根据天气列表将其分类。首先我们需要将这些时间增量转换为天;这是通过系列的 dt.days
方法获得的(dt
是 datetime 的缩写)。然后我们可以使用 pd.cut
来构建这样的箱子(注意我在天气列表中添加了 0,以使 windows 有效):
weather_list = [0, 5, 15, 30, 40]
bins = pd.cut(datediff.dt.days, weather_list)
bins
0 (0, 5]
1 (5, 15]
2 (15, 30]
3 (15, 30]
dtype: category
Categories (4, object): [(0, 5] < (5, 15] < (15, 30] < (30, 40]]
最后可以将其转换为指标列 pd.get_dummies
:
indicators = pd.get_dummies(bins)
indicators
(0, 5] (5, 15] (15, 30] (30, 40]
0 1 0 0 0
1 0 1 0 0
2 0 0 1 0
3 0 0 1 0
您可以使用
将这些添加到您的数据框中pd.concat([epi.data,indicators],axis = 1)