从数据帧列创建python嵌套字典并将结果保存在新的DataFram中

2024-04-20 11:02:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力从一个数据帧中获取3列,并从中创建一个字典,然后将其保存在一个新的数据帧中。你知道吗

以下是原始数据帧:

part_id    name exp_no  key value
1       Clips   58868   name    Charlie
1       Clips   58870   phone   123456789
1       Clips   58845   region  Ontario
2       Clips   58821   city    London
2       Clips   58832   country Chili
3       Nails   58869   postalcode  123456
3       Nails   58830   colour  red

我使用熊猫,但没有太大的成功,并将非常感谢一些帮助

正在创建新的数据帧并只获取其中唯一的数据

new_file = pd.DataFrame()
new_file = data_unique
for part_id in data.iterrows():
  if part_id in new_file:

TypeError:“Series”对象是可变的,因此不能对它们进行散列 这个错误表明DataFrame不是这种程序的正确选择。还有什么方法更合适?你知道吗

这就是最终结果的样子-每个零件号有一条记录

part_id name    exp_no  key value   exp_key_value
1       clips   58868   name    Charlie {"attributes": 
[{"exp_no":"58868", "key":"name", "value":"Charlie"}, 
{"exp_no":"58870", "key":"phone", "value":"123456789"}, 
{"exp_no":"58845", "key":"region", "value":"Ontario"} ] } 
2       clips   58821   city    London  {"attributes": 
[{"exp_no":"58821", "key":"city", "value":"London"}, 
{"exp_no":"58832", "key":"country", "value":"Chili"} ] }
3   nails   58869   postal  12345   {"attributes": 
[{"exp_no":"58869", "key":"postal", "value":"12345"}, 
{"exp_no":"58830", "key":"colour", "value":"red"} ] }

Tags: 数据keynonameidcitynewvalue
1条回答
网友
1楼 · 发布于 2024-04-20 11:02:20

试试这个:

   df = pd.DataFrame({"part_id":[1,1,1,2,2,3,3],
               "name":['Clips', 'Clips' , 'Clips' , 'Clips', 'Clips', 'Nails', 'Nails'], 
               "exp_no": [58868, 58869, 58860, 58861, 588682, 58863, 58864], 
               "key":['name', 'phone', 'region','city', 'country', 'postalcode', 'colour'], 
              "value": ['Charlie', '123456789', 'Ontario', 'London','Chili', '123456', 'red']})

   # create the dictonary for each row
   def create_dic(row):
     dict ={}
     dict['exp_no'] = row['exp_no']
     dict['key'] = row['exp_no']
     dict['value'] = row['exp_no']
     return dict

   df['exp_key_value'] = df.apply(create_dic, axis=1)

   df_dropped = df.drop_duplicates(subset= 'part_id',  keep ='first')

   final =[]
   dict = {}

   for i, part in enumerate(df['part_id'].unique()):
     dict['attribute'] =df[df['part_id']==part]['exp_key_value'].tolist()
     final.append(dict)

   df_dropped['exp_key_value'] = final

相关问题 更多 >