可以说我有一个格式为df
的数据帧:我只显示了id = 1
,但有几个id
值。
Email id Product Value
x@gmail.com 1 p_1 1
y@gmail.com 1 p_2 2
z@gmail.com 1 p_3 3
t@gmail.com 1 p_4 4
现在我需要以下格式的结果:
Email id Product Value Product_n Value_n
x@gmail.com 1 p_1 1 p_2 2
x@gmail.com 1 p_1 1 p_3 3
x@gmail.com 1 p_1 1 p_4 4
y@gmail.com 1 p_2 2 p_1 1
y@gmail.com 1 p_2 2 p_3 3
y@gmail.com 1 p_2 2 p_4 4 ....so on
我接受特定Product
的{{1}}中的每个项目,然后用其余的id
项创建两个新列。
我通过使用Product
循环进行了相同的尝试,但是对于每个for
大约有1000个id
值和9个Product
项目,这花费了我很多时间。我们可以使过程更快吗?
id
答案 0 :(得分:1)
尝试一下
temp=df[['Product','Value']]
temp_df=pd.DataFrame()
for val in temp['Product'].unique().tolist():
temp_df=pd.concat([temp_df,temp.copy().assign(key=val)])
df= pd.merge(df,temp_df,left_on=['Product'],right_on=['key'],how='right')
df=df.rename(columns={'Product_x':'Product','Value_x':'Value','Product_y':'Product_n','Value_y':'Value_n'})
df=df[df['Product']!=df['Product_n']]
说明: