Python 将选定的数据帧列转换为矢量表示(包括重复值)
我有下面的数据帧(product.csv),我想将其转换为矢量表示: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_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]
如果这些是唯一的列,这是一个不错的选择!非常感谢。你的解决方案很有帮助。