我有以下数据框 (product.csv),我想将其转换为矢量表示:product_id,value111,3000121,2500131,3500141,1000111,3300151,2000161,2300171,1300181,1500191,4500121,6000121,1100我的预期输出应该包括所有行,包括重复的 product_ids 并且完全按照下面的矢量形式:[111:3000; 121:2500; 131:3500;141:1000;111:3300; 151:2000; 161:2300;171:1300; 181:1500; 191:4500; 121:6000; 121:1100]到目前为止,这是我尝试过的:import pandas as pddf = pd.read_csv('product.csv') #, index_col=0, sep=','my_dict_indx = df.set_index('product_id')['value'].to_dict()print(my_dict_indx)my_dict_zip = dict(zip(df.product_id, df.value))print(my_dict_zip)my_dict_groupby = df.groupby(level=0).apply(lambda x: x.to_dict('r')).to_dict()print(my_dict_groupby)但是,两者my_dict_indx = df.set_index('product_id')['value'].to_dict()都给my_dict_zip = dict(zip(df.product_id, df.value))我以下输出但排除重复的 product_ids 111 和 121,不返回正确的顺序(例如,输出以 161:2300 而不是 111:3000 开头):{161: 2300, 131: 3500, 171: 1300, 141: 1000, 111: 3300, 181: 1500, 151: 2000, 121: 1100, 191: 4500}另一方面,在my_dict_groupby = df.groupby(level=0).apply(lambda x: x.to_dict('r')).to_dict()下面给出了正确的记录数和正确的顺序,但包括不必要的列索引、列名,并且没有矢量表示。{0: [{'product_id': 111, 'value': 3000}], 1: [{'product_id': 121, 'value': 2500}], 2: [{'product_id': 131, 'value' : 3500}], 3: [{'product_id': 141, 'value': 1000}], 4: [{'product_id': 111, 'value': 3300}], 5: [{'product_id': 151 , 'value': 2000}], 6: [{'product_id': 161, 'value': 2300}], 7: [{'product_id': 171, 'value': 1300}], 8: [{' product_id': 181, 'value': 1500}], 9: [{'product_id': 191, 'value': 4500}], 10: [{'product_id': 121, 'value': 6000}], 11 : [{'product_id': 121, 'value': 1100}]}我怎样才能增强我的解决方案,以 [] 向量形式而不是 {} 字典形式实现我的预期输出。提前致谢。
1 回答
慕沐林林
TA贡献2016条经验 获得超9个赞
我会创建一个字符串数组,因为它是支持您想要的输出格式的唯一方法。然后你可以简单地使用.values从熊猫系列中获取列/数组
df['output_col'] = (df['product_id'].astype(str) + ':' + df['value'].astype(str)).values
输出:
array(['111:3000', '121:2500', '131:3500', '141:1000', '111:3300',
'151:2000', '161:2300', '171:1300', '181:1500', '191:4500',
'121:6000', '121:1100'], dtype=object)
如果您希望将其作为列表而不是数组,只需在方法.tolist()之后添加即可.values。最后,请记住,在 Python 中,a,用于分隔数组/列表中的元素,而不是;
添加回答
举报
0/150
提交
取消