oku*_*oub 5 dataframe melt pandas data-science data-munging
我有数据框:
subject A_target_word_gd A_target_word_fd B_target_word_gd B_target_word_fd subject_type
1 1 2 3 4 mild
2 11 12 13 14 moderate
Run Code Online (Sandbox Code Playgroud)
我想将其融合为一个数据框,如下所示:
cond subject subject_type value_type value
A 1 mild gd 1
A 1 mild fg 2
B 1 mild gd 3
B 1 mild fg 4
A 2 moderate gd 11
A 2 moderate fg 12
B 2 moderate gd 13
B 2 moderate fg 14
...
...
Run Code Online (Sandbox Code Playgroud)
意思是,根据列名称的分隔符来融化。
最好的方法是什么?
另一种方法(与 @anky_91 发布的非常相似。在他发布之前已经开始输入它,因此将其放在那里。)
new_df =pd.melt(df, id_vars=['subject_type','subject'], var_name='abc').sort_values(by=['subject', 'subject_type'])
new_df['cond']=new_df['abc'].apply(lambda x: (x.split('_'))[0])
new_df['value_type']=new_df.pop('abc').apply(lambda x: (x.split('_'))[-1])
new_df
Run Code Online (Sandbox Code Playgroud)
输出
subject_type subject value cond value_type
0 mild 1 1 A gd
2 mild 1 2 A fd
4 mild 1 3 B gd
6 mild 1 4 B fd
1 moderate 2 11 A gd
3 moderate 2 12 A fd
5 moderate 2 13 B gd
7 moderate 2 14 B fd
Run Code Online (Sandbox Code Playgroud)