Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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_Python 3.x_Pandas_Csv_Dataframe - Fatal编程技术网

Python 分组多个索引并添加分组键

Python 分组多个索引并添加分组键,python,python-3.x,pandas,csv,dataframe,Python,Python 3.x,Pandas,Csv,Dataframe,我在.csv中设置了数据,如下所示,我想使用python创建group by并添加一列作为内部id 输入文件 输出文件必须是新的.csv文件 您可以使用熊猫和: 请详细说明到目前为止您尝试了什么,以及您遇到了哪些问题希望得到帮助。对不起,我是python新手。我做了“df.groupby('name')”,得到了带有名称分组的输出,但实际我想做的是带有3列的groupby,即“name”、“city”、“country”。然后为同一组添加内部_id,就像我提到的输出文件一样。你能用一个pytho

我在.csv中设置了数据,如下所示,我想使用python创建group by并添加一列作为内部id

输入文件 输出文件必须是新的.csv文件
您可以使用熊猫和:


请详细说明到目前为止您尝试了什么,以及您遇到了哪些问题希望得到帮助。对不起,我是python新手。我做了“df.groupby('name')”,得到了带有名称分组的输出,但实际我想做的是带有3列的groupby,即“name”、“city”、“country”。然后为同一组添加内部_id,就像我提到的输出文件一样。你能用一个python代码示例来指导我吗?谢谢!!
unq_id  name    city    country   supplier
053     ABC     CAL     UA        sup_01
054     DEF     NY      UA        sup_01
055     ABC     CAL     UA        sup_02
056     ABC     CAL     UA        sup_03
057     DEF     NY      UA        sup_02
 internal_id   unq_id     supplier
 001           053        sup_01    
 001           055        sup_02
 001           056        sup_03
 002           054        sup_01
 002           057        sup_02
import pandas as pd

# read file
df = pd.read_csv('file.csv')

# define key columns
key_cols = ['name', 'city', 'country']

# convert to integer category codes
df['cat'] = df[key_cols].apply(tuple, axis=1).astype('category').cat.codes

# add one, convert to string, and format
df['cat'] = (df['cat'] + 1).apply(str).str.zfill(3)

# filter columns
res = df[['cat', 'unq_id', 'supplier']]

# output result to csv
res.to_csv('file_out.csv', index=False)

print(res)

   cat  unq_id supplier
0  001      53   sup_01
1  002      54   sup_01
2  001      55   sup_02
3  001      56   sup_03
4  002      57   sup_02