首先,请原谅是否已被询问和回答。 我看过here和here,浏览了推荐重复的标题并尝试使用搜索引擎,但是似乎找不到正确的关键字。
我的问题如下:给定一个具有两个“标识符”列的数据框,我想创建一个索引,该索引唯一地描述两列中值的每种组合:
例如:列'a'的值为0,列'b'的值为'0',它的索引号应为1。相同的组合应映射到相同的值。
df = pd.DataFrame({
'a': np.random.randint(0,3,10),
'b': np.random.randint(0,3,10),
'c': np.random.randint(0,10,10)
})
mapping = [(*key, i+1) for i, key in enumerate(df.groupby(by=['a', 'b']).groups.keys())]
crutch = pd.DataFrame(mapping, columns=['a', 'b', 'new_index'])
df = df.merge(crutch, left_on=['a', 'b'], right_on=['a', 'b'])
这行得通,但似乎熊猫中应该内置了一些我想念的东西。
那么,熊猫中内置有什么可以帮助我的东西吗?
非常感谢您的帮助。
答案 0 :(得分:2)
IIUC,groupby.ngroup
df['new_index'] = df.groupby(['a','b']).ngroup().add(1)
print(df)
a b c new_index
0 2 1 4 6
1 1 1 5 3
2 1 1 8 3
3 1 1 2 3
4 2 2 8 7
5 2 2 5 7
6 2 0 8 5
7 0 1 7 1
8 1 2 5 4
9 0 2 5 2