У меня есть датафрейм Python Pandas.
Например, вот мои данные:
id A_1 A_2 B_1 B_2 0 j2 1 5 10 8 1 j3 2 6 11 9 2 j4 3 7 12 10
Я хочу, чтобы это выглядело так:
id Other A B 0 j2 1 1 10 1 j2 2 5 8 2
Можетпожалуйста, помогите мне. Большое вам спасибо!
Использование wide_to_long с DataFrame.sort_values:
wide_to_long
DataFrame.sort_values
df = (pd.wide_to_long(df, ['A','B'], i='id', j='Other', sep='_') .sort_values('id') .reset_index()) print (df) id Other A B 0 j2 1 1 10 1 j2 2 5 8 2 j3 1 2 11 3 j3 2 6 9 4 j4 1 3 12 5 j4 2 7 10
Мы также можем использовать DataFrame.melt + Series.str.split для исполнения DataFrame.pivot_table:
DataFrame.melt
Series.str.split
DataFrame.pivot_table
df2=df.melt('id') df2[['columns','Other']]=df2['variable'].str.split('_',expand=True) new_df= ( df2.pivot_table(columns='columns',index=['id','Other'],values='value') .reset_index() .rename_axis(columns=None) ) print(new_df) id Other A B 0 j2 1 1 10 1 j2 2 5 8 2 j3 1 2 11 3 j3 2 6 9 4 j4 1 3 12 5 j4 2 7 10