我有一个数据框,如下所示:
d = {'item': [1, 2,3,4,5,6], 'time': [1297468800, 1297468809, 12974688010, 1297468890, 1297468820,1297468805]}
df = pd.DataFrame(data=d)
df
的输出如下:
item time
0 1 1297468800
1 2 1297468809
2 3 1297468801
3 4 1297468890
4 5 1297468820
5 6 1297468805
此处的time
是基于unixsystem时间的。我的目标是替换数据框中的time
列。
例如
mintime = 1297468800
maxtime = 1297468890
我想将时间分成10
(可以通过使用20个间隔来更改)间隔,并在time
中重新编码df
列。如
item time
0 1 1
1 2 1
2 3 1
3 4 9
4 5 3
5 6 1
自从我拥有数十亿条记录以来,最有效的方法是什么?谢谢
答案 0 :(得分:3)
您可以将pd.cut
与np.linspace
一起使用来指定垃圾箱。这将对您的列进行分类编码,然后您可以从中按顺序提取代码:
bins = np.linspace(df.time.min() - 1, df.time.max(), 10)
df['time'] = pd.cut(df.time, bins=bins, right=True).cat.codes + 1
df
item time
0 1 1
1 2 1
2 3 1
3 4 9
4 5 3
5 6 1
或者,根据您对间隔边的处理方式,也可以
bins = np.linspace(df.time.min(), df.time.max() + 1, 10)
pd.cut(df.time, bins=bins, right=False).cat.codes + 1
0 1
1 1
2 1
3 9
4 2
5 1
dtype: int8