Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将选定的数据帧列转换为矢量表示(包括重复值)_Python_Pandas_Dataframe_Dictionary_Vector - Fatal编程技术网

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

Python 将选定的数据帧列转换为矢量表示(包括重复值),python,pandas,dataframe,dictionary,vector,Python,Pandas,Dataframe,Dictionary,Vector,我有下面的数据帧(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_ID,并采用向量形式,如下所示: [111:3000;121:2500;131:3500;141:1000;111:3300;

我有下面的数据帧(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_ID,并采用向量形式,如下所示:

[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\u indx=df.set_index('product_id')['value']to_dict()
my_dict\u zip=dict(zip(df.product_id,df.value))
给我以下输出,但排除重复的产品id 111和121,不要返回正确的顺序(例如,输出从161:2300开始,而不是从111:3000开始):

{161:2300131:3500,171:1300,141:1000,111:3300181:1500, 151:2000121:1100191:4500}

另一方面,
my_dict_groupby=df.groupby(level=0)。apply(lambda x:x.to_dict('r'))。to_dict()
在下面为我提供了正确的记录数和正确的顺序,但包括不必要的列索引、列名,并且没有向量表示

{0:[{'product\u id':111,'value':3000}],1:[{'product\u id':121, 'value':2500}],2:[{'product_id':131,'value':3500}],3: [{'product\u id':141,'value':1000}],4:[{'product\u id':111,'value': 3300}],5:[{'product\u id':151,'value':2000}],6:[{'product\u id': 161,'value':2300}],7:[{'product_id':171,'value':1300}],8: [{'product\u id':181,'value':1500}],9:[{'product\u id':191,'value': 4500}],10:[{'product\u id':121,'value':6000}],11:[{'product\u id': 121,“值”:1100}]}


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

我将创建字符串数组,因为这是支持所需输出格式的唯一方法。然后您可以简单地使用
.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中,
用于分隔数组/列表中的元素,而不是

我将创建字符串数组,因为这是支持所需输出格式的唯一方法。然后您可以简单地使用
.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中,
用于分隔数组/列表中的元素,而不是

添加到上述答案中,
[k+”:“+v代表k,v在df.astype(str.values)中]
如果这些是唯一的列,那么这是一个不错的选择!非常感谢。您的解决方案非常有用。在上面的答案中添加,
[k+”:“+v代表k,df.astype(str.values)中的v]
如果这些是唯一的列,这是一个不错的选择!非常感谢。你的解决方案很有帮助。