【发布时间】:2020-10-31 08:24:39
【问题描述】:
我有以下数据框 (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, '值':2500}],2:[{'product_id':131,'值':3500}],3: [{'product_id': 141, 'value': 1000}], 4: [{'product_id': 111, 'value': 3300}],5:[{'product_id':151,'value':2000}],6:[{'product_id': 161,'值':2300}],7:[{'product_id':171,'值':1300}],8: [{'product_id': 181, 'value': 1500}], 9: [{'product_id': 191, 'value': 4500}], 10: [{'product_id': 121, 'value': 6000}], 11: [{'product_id': 121,'值':1100}]}
如何增强我的解决方案,以 [] 向量形式而不是 {} 字典形式实现我的预期输出。提前致谢。
【问题讨论】:
标签: python pandas dataframe dictionary vector