问题
我是Python的新手,正在尝试将表转换为所需的输出。
可复制的数据
我有这张桌子,我正在尝试将其转换为预计的输出。
pd.DataFrame({'A': ['1.Food', '1.1Bread', '1.2Chicken', 'Car', 'Animal', 'Ball'], 'Val1': [10, 14, 94, 13, 49, 89], 'Val2': [1,2,3,4,5,6], 'Val3' : [100, 120, 130, 140, 150, 160]},
columns=['A', 'Val1', 'Val2', 'Val3'])
A Val1 Val2 Val3
0 1.Food 10 1 100
1 1.1Bread 14 2 120
2 1.2Chicken 94 3 130
3 Car 13 4 140
4 Animal 49 5 150
5 Ball 89 6 160
预计输出
有人可以跟我分享如何正确地进行调整吗?谢谢!
更新
我使用过melt,它以某种方式创建了我想要的东西,但是我仍然无法获得我的子类别。
t1.melt(id_vars = ['A'])
A variable value
0 1.Food Val1 10
1 1.1Bread Val1 14
2 1.2Chicken Val1 94
3 Car Val1 13
4 Animal Val1 49
5 Ball Val1 89
6 1.Food Val2 1
7 1.1Bread Val2 2
8 1.2Chicken Val2 3
9 Car Val2 4
10 Animal Val2 5
11 Ball Val2 6
12 1.Food Val3 100
13 1.1Bread Val3 120
14 1.2Chicken Val3 130
15 Car Val3 140
16 Animal Val3 150
17 Ball Val3 160
问题来源:stackoverflow
我找不到真正直接的方法,所以我一步一步地做到了:
完成此操作后,将通过一个简单的堆栈给出结果。代码可以是:
df = pd.DataFrame({'A': ['1.Food', '1.1Bread', '1.2Chicken', 'Car', 'Animal', 'Ball'], 'Val1': [10, 14, 94, 13, 49, 89], 'Val2': [1,2,3,4,5,6], 'Val3' : [100, 120, 130, 140, 150, 160]},
columns=['A', 'Val1', 'Val2', 'Val3'])
df['Categ'] = df['A'].str.extract(r'^(\d+)\.')
df['SubCategory'] = df['A'].str.extract(r'^(\d+\.\d+.\*')
df.loc[df['SubCategory'].isna(),'Category'] = df.loc[
df['SubCategory'].isna(),'A']
df.loc[~ df['Categ'].isna(), 'Category'] = df[~ df['Categ'].isna()].groupby(
'Categ')['Category'].apply(lambda x: x.bfill().ffill())
resul = df.set_index(['Category','SubCategory'])[
['Val1', 'Val2', 'Val3']].stack().reset_index().rename(
columns={'level_2': 'ValueType', 0: 'Value'})
它给出了预期的结果:
Category SubCategory ValueType Value
0 1.Food NaN Val1 10
1 1.Food NaN Val2 1
2 1.Food NaN Val3 100
3 1.Food 1.1Bread Val1 14
4 1.Food 1.1Bread Val2 2
5 1.Food 1.1Bread Val3 120
6 1.Food 1.2Chicken Val1 94
7 1.Food 1.2Chicken Val2 3
8 1.Food 1.2Chicken Val3 130
9 Car NaN Val1 13
10 Car NaN Val2 4
11 Car NaN Val3 140
12 Animal NaN Val1 49
13 Animal NaN Val2 5
14 Animal NaN Val3 150
15 Ball NaN Val1 89
16 Ball NaN Val2 6
17 Ball NaN Val3 160
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。