如何在python3中替换(重新定义)Dataframe中的一列?

时间:2019-02-23 19:37:58

标签: python-3.x dataframe

我有一个数据框,如下所示:

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

自从我拥有数十亿条记录以来,最有效的方法是什么?谢谢

1 个答案:

答案 0 :(得分:3)

您可以将pd.cutnp.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