pandas - 通过熊猫(python)中列名的子字符串融化列
问题描述
我有数据框:
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
我想把它融化成一个看起来像的数据框:
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
...
...
意思是,根据列名的分隔符来融化。
最好的方法是什么?
解决方案
另一种方法(与@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
输出
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
推荐阅读
- spring - spring3 MVC 项目中的 springfox-swagger2
- javascript - node.js 安装和 npm 命令
- flutter - 如何在 Flutter/Dart 中获取数字的小数位
- gmail-api - GMail API (message.send) 需要哪些 cURL 标头?
- python - 如果 Python 列表中存在文件,如何在不重新建立 SSH 连接的情况下将文件上传到远程服务器?
- google-chrome-extension - 为什么我需要 Chrome 扩展匹配权限?
- django - 尽管我的字符串在范围内,但类型字符变量(x)的值太长
- mysql - 如何更改查询结果的时区
- reactjs - 我可以向 React Native 导航按钮添加动画吗?
- python - 删除 view.py 中的个性化类 - Django