python – 在两列上使用pandas进行分解
发布时间:2020-12-20 12:02:19 所属栏目:Python 来源:网络整理
导读:我在pandas数据框中有一些看起来像这样的数据; CAR_TYPE MILEAGEFORD 100 FORD 100 FORD 200 FORD 300VW 100 VW 150VW 150VW 300 我想“分解”数据以返回每对的唯一ID.但是我希望将独特的ID“重置”为零,以便单独制作汽车.目前我的分解使用如下; df['CAR_ID'
我在pandas数据框中有一些看起来像这样的数据;
CAR_TYPE MILEAGE FORD 100 FORD 100 FORD 200 FORD 300 VW 100 VW 150 VW 150 VW 300 我想“分解”数据以返回每对的唯一ID.但是我希望将独特的ID“重置”为零,以便单独制作汽车.目前我的分解使用如下; df['CAR_ID']=pd.factorize(pd.lib.fast_zip([df.CAR_TYPE.values,df.MILEAGE.values]))[0] df.CAR_ID=df[['CAR_ID','CAR_TYPE']].astype(str).apply(lambda x: ''.join(x),axis=1) 给我一些类似的东西 CAR_TYPE MILEAGE CAR_ID FORD 100 FORD0 FORD 100 FORD0 FORD 200 FORD1 FORD 300 FORD2 VW 100 VW3 VW 150 VW4 VW 150 VW4 VW 300 VW5 理想情况下,我想 CAR_TYPE MILEAGE IDEAL_CAR_ID FORD 100 FORD0 FORD 100 FORD0 FORD 200 FORD1 FORD 300 FORD2 VW 100 VW0 VW 150 VW1 VW 150 VW1 VW 300 VW2 为一个相对愚蠢的问题道歉,经过漫长的一天后,他的斗智斗勇.我知道它可以用stack / unstack,reset_index / set_index解决. 解决方法
如果MILEAGE中的值按组排序,则可以将
groupby 与
rank 一起使用:
a = df.groupby(['CAR_TYPE'])['MILEAGE'].rank(method='dense') .sub(1).astype(int).astype(str) df['IDEAL_CAR_ID'] = df['CAR_TYPE'].add(a) print (df) CAR_TYPE MILEAGE IDEAL_CAR_ID 0 FORD 100 FORD0 1 FORD 100 FORD0 2 FORD 200 FORD1 3 FORD 300 FORD2 4 VW 100 VW0 5 VW 150 VW1 6 VW 150 VW1 7 VW 300 VW2
a = df.groupby(['CAR_TYPE'])['MILEAGE'] .transform(lambda x: pd.factorize(x)[0]).astype(str) df['IDEAL_CAR_ID'] = df['CAR_TYPE'].add(a) print (df) CAR_TYPE MILEAGE IDEAL_CAR_ID 0 FORD 100 FORD0 1 FORD 100 FORD0 2 FORD 200 FORD1 3 FORD 300 FORD2 4 VW 100 VW0 5 VW 150 VW1 6 VW 150 VW1 7 VW 300 VW2 如果列未排序,则输出不同: print (df) CAR_TYPE MILEAGE 0 FORD 500 1 FORD 500 2 FORD 200 3 FORD 300 4 VW 100 5 VW 150 6 VW 150 7 VW 300 a = df.groupby(['CAR_TYPE'])['MILEAGE'].rank(method='dense') .sub(1).astype(int).astype(str) df['IDEAL_CAR_ID'] = df['CAR_TYPE'].add(a) print (df) CAR_TYPE MILEAGE IDEAL_CAR_ID 0 FORD 500 FORD2 1 FORD 500 FORD2 2 FORD 200 FORD0 3 FORD 300 FORD1 4 VW 100 VW0 5 VW 150 VW1 6 VW 150 VW1 7 VW 300 VW2 a = df.groupby(['CAR_TYPE'])['MILEAGE'] .transform(lambda x: pd.factorize(x)[0]).astype(str) df['IDEAL_CAR_ID'] = df['CAR_TYPE'].add(a) print (df) CAR_TYPE MILEAGE IDEAL_CAR_ID 0 FORD 500 FORD0 1 FORD 500 FORD0 2 FORD 200 FORD1 3 FORD 300 FORD2 4 VW 100 VW0 5 VW 150 VW1 6 VW 150 VW1 7 VW 300 VW2 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |