2024-09-26 18:00:27 发布
网友
我有以下数据集在熊猫数据帧。你知道吗
group_id sub_group_id 0 0 0 1 1 0 2 0 2 1 2 2 3 0 3 0
但是我想把这些组id合并成一个统一的组id
group_id sub_group_id consolidated_group_id 0 0 0 0 1 1 1 0 2 2 0 3 2 1 4 2 2 5 2 2 5 3 0 6 3 0 6
有什么通用的或数学的方法可以做到这一点吗?你知道吗
cols = ['group_id', 'sub_group_id'] df.assign( consolidated_group_id=pd.factorize( pd.Series(list(zip(*df[cols].values.T.tolist()))) )[0] ) group_id sub_group_id consolidated_group_id 0 0 0 0 1 0 1 1 2 1 0 2 3 2 0 3 4 2 1 4 5 2 2 5 6 3 0 6 7 3 0 6
您需要将值转换为tuples,然后使用^{}:
tuples
df['consolidated_group_id'] = pd.factorize(df.apply(tuple,axis=1))[0] print (df) group_id sub_group_id consolidated_group_id 0 0 0 0 1 0 1 1 2 1 0 2 3 2 0 3 4 2 1 4 5 2 2 5 6 3 0 6 7 3 0 6
Numpy解决方案有点修改this answer-通过[::-1]更改顺序,并通过[0]选择返回数组(^{}):
[::-1]
[0]
a = df.values def unique_return_inverse_2D(a): # a is array a1D = a.dot(np.append((a.max(0)+1)[:0:-1].cumprod()[::-1],1)) return np.unique(a1D, return_inverse=1)[::-1][0] def unique_return_inverse_2D_viewbased(a): # a is array a = np.ascontiguousarray(a) void_dt = np.dtype((np.void, a.dtype.itemsize * np.prod(a.shape[1:]))) return np.unique(a.view(void_dt).ravel(), return_inverse=1)[::-1][0] df['consolidated_group_id'] = unique_return_inverse_2D(a) df['consolidated_group_id1'] = unique_return_inverse_2D_viewbased(a) print (df) group_id sub_group_id consolidated_group_id consolidated_group_id1 0 0 0 0 0 1 0 1 1 1 2 1 0 2 2 3 2 0 3 3 4 2 1 4 4 5 2 2 5 5 6 3 0 6 6 7 3 0 6 6
您需要将值转换为} :
tuples
,然后使用^{Numpy解决方案有点修改this answer-通过} ):
[::-1]
更改顺序,并通过[0]
选择返回数组(^{相关问题 更多 >
编程相关推荐