提问者:小点点

将选定的dataframe列转换为向量表示形式(包括重复值)


我有下面的数据框架(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_id111和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:[{

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


共1个答案

匿名用户

我会创建一个字符串数组,因为这是支持您所希望的输出格式的唯一方法。 然后您可以简单地使用.values从pandas系列中获取列/数组

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)

如果希望将其作为列表而不是数组,只需在.values方法之后添加.toList()即可。 最后,请记住,在Python中,用于分隔数组/列表中的元素,而不是