Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:对于两个或更多特定列值完全相同的行组,如何将唯一整数指定为新列_Python_Pandas - Fatal编程技术网

Python 熊猫:对于两个或更多特定列值完全相同的行组,如何将唯一整数指定为新列

Python 熊猫:对于两个或更多特定列值完全相同的行组,如何将唯一整数指定为新列,python,pandas,Python,Pandas,在数据帧中,我有两组行,其中两个特定列的值完全相同。如何为这些行添加一个新列,从整数1(不是整数0)开始分配一个唯一的整数?任何完全唯一的行也会得到一个int 这是一个示例数据帧,其中第2列和第3列在多组行之间共享相同的值 df = pd.DataFrame([['plane1', '', 'az'] , ['plane2', '', 'az'] , ['plane3', 'az', ''] , ['plane4', 'az', ''] , ['plane5', 'ny', ''] , ['pl

在数据帧中,我有两组行,其中两个特定列的值完全相同。如何为这些行添加一个新列,从整数1(不是整数0)开始分配一个唯一的整数?任何完全唯一的行也会得到一个int

这是一个示例数据帧,其中第2列和第3列在多组行之间共享相同的值

df = pd.DataFrame([['plane1', '', 'az'] , ['plane2', '', 'az'] , ['plane3', 'az', ''] , ['plane4', 'az', ''] , ['plane5', 'ny', ''] , ['plane6', 'ny', ''], ['plane7', 'fl', 'fl'], ['plane8', 'fl', 'fl'], ['plane10', '', 'de'], ['plane11', '', 'de'], ['plane12', '', 'mo'], ['plane13', '', 'mo']])
输出

    0   1   2
0   plane1      az
1   plane2      az
2   plane3  az  
3   plane4  az  
4   plane5  ny  
5   plane6  ny  
6   plane7  fl  fl
7   plane8  fl  fl
8   plane10     de
9   plane11     de
10  plane12     mo
11  plane13     mo
这是所需的输出,使用精心制作的示例数据帧

df = pd.DataFrame([['plane1', '', 'az', 1] , ['plane2', '', 'az', 1] , ['plane3', 'az', '', 2] , ['plane4', 'az', '', 2] , ['plane41', 'az', '', 2], ['plane5', 'ny', '', 3] , ['plane6', 'ny', '', 3], ['plane7', 'fl', 'fl', 4], ['plane8', 'fl', 'fl', 4], ['plane10', '', 'de', 5], ['plane11', '', 'de', 5], ['plane12', '', 'mo', 6], ['plane13', '', 'mo', 6]])
灌肠

    0   1   2   3
0   plane1      az  1
1   plane2      az  1
2   plane3  az      2
3   plane4  az      2
4   plane41 az      2
5   plane5  ny      3
6   plane6  ny      3
7   plane7  fl  fl  4
8   plane8  fl  fl  4
9   plane10     de  5
10  plane11     de  5
11  plane12     mo  6
12  plane13     mo  6

在您的情况下,转换为
元组后
分解

df[3]=pd.factorize(df[[1,2]].apply(tuple,1))[0]+1
df
          0   1   2  3
0    plane1      az  1
1    plane2      az  1
2    plane3  az      2
3    plane4  az      2
4    plane5  ny      3
5    plane6  ny      3
6    plane7  fl  fl  4
7    plane8  fl  fl  4
8   plane10      de  5
9   plane11      de  5
10  plane12      mo  6
11  plane13      mo  6

或将类别与类别代码一起使用

df[[1,2]].apply(tuple,1).astype(category).cat.codes
如果您只需要唯一的值,可以使用
hash

df[[1,2]].apply(tuple,1).apply(hash,1)

使用
groupby
sort=False
ngroup

df[3] = df.groupby([1,2], sort=False).ngroup()+1

Out[1261]:
          0   1   2  3
0    plane1      az  1
1    plane2      az  1
2    plane3  az      2
3    plane4  az      2
4    plane5  ny      3
5    plane6  ny      3
6    plane7  fl  fl  4
7    plane8  fl  fl  4
8   plane10      de  5
9   plane11      de  5
10  plane12      mo  6
11  plane13      mo  6
df[3] = df.groupby([1,2], sort=False).ngroup()+1

Out[1261]:
          0   1   2  3
0    plane1      az  1
1    plane2      az  1
2    plane3  az      2
3    plane4  az      2
4    plane5  ny      3
5    plane6  ny      3
6    plane7  fl  fl  4
7    plane8  fl  fl  4
8   plane10      de  5
9   plane11      de  5
10  plane12      mo  6
11  plane13      mo  6