Python 重新索引(重新映射)列';s值
我有一个看起来像Python 重新索引(重新映射)列';s值,python,pandas,indexing,dataframe,Python,Pandas,Indexing,Dataframe,我有一个看起来像 groupID date_time value member Session 23 2013-10-09 09:00:00 664639 Jerome 2607 23 2013-10-09 09:05:00 197290 Hence 2608 35 2013-10-09 09:10:00 470186
groupID date_time value member Session
23 2013-10-09 09:00:00 664639 Jerome 2607
23 2013-10-09 09:05:00 197290 Hence 2608
35 2013-10-09 09:10:00 470186 Ann 2608
35 2013-10-09 09:15:00 181314 Mikka 2608
35 2013-10-09 09:20:00 969427 Cristy 2609
37 2013-10-09 09:25:00 261473 James 2609
37 2013-10-09 09:30:00 3698 Oliver 2609
因此,我希望的目标不是2607
我有1
,而不是2608
我有2
等,即进行某种重新索引或映射
groupID date_time value member Session
23 2013-10-09 09:00:00 664639 Jerome 1
23 2013-10-09 09:05:00 197290 Hence 2
35 2013-10-09 09:10:00 470186 Ann 2
35 2013-10-09 09:15:00 181314 Mikka 2
35 2013-10-09 09:20:00 969427 Cristy 3
37 2013-10-09 09:25:00 261473 James 3
37 2013-10-09 09:30:00 3698 Oliver 3
搜索重新编制索引
没有给出期望的结果,因此我们将非常感谢您的建议IIUC您可以执行以下操作:
df['Session'] -= 2606
看起来你的价值观正在以积极的方式增长
或者你可以定义一个dict并重新映射
session_vals = df['Session'].unique()
d = dict(zip(session_vals, np.arange(1, len(session_vals) + 1)))
df['Session'] = df['Session'].map(d)
另一种方法是使用
试试这个:
df['Session'] = np.unique(df['Session'], return_inverse=True)[1]
唯一会话将从0开始编号。奇怪的是,它以
3
开始会话可能您列中的第一个会话是3
,但列中最小的数字将是0
。唯一标签将按输入的排序顺序排列。可能添加1以匹配所需的输出np。唯一(df['Session'],return_inverse=True)[1]+1
谢谢,EdChum,它可以工作!顺便说一句,也许你可以看看这个问题(特别是因为它使用了你早期提出的方法,但是在groupby
对象上有问题!
df['Session'] = np.unique(df['Session'], return_inverse=True)[1]