猿问

将选定的数据框列转换为矢量表示(包括重复值)

我有以下数据框 (product.csv),我想将其转换为矢量表示:


product_id,value

111,3000

121,2500

131,3500

141,1000

111,3300

151,2000

161,2300

171,1300

181,1500

191,4500

121,6000

121,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 pd


df = 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}]}


我怎样才能增强我的解决方案,以 [] 向量形式而不是 {} 字典形式实现我的预期输出。提前致谢。


慕村9548890
浏览 83回答 1
1回答

慕沐林林

我会创建一个字符串数组,因为它是支持您想要的输出格式的唯一方法。然后你可以简单地使用.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,用于分隔数组/列表中的元素,而不是;
随时随地看视频慕课网APP

相关分类

Python
我要回答