我有一个客户(coper)和资产配置(asset)表
A = [[1,2],[3,4],[5,6]]
idx = ['coper1','coper2','coper3']
cols = ['asset1','asset2']
df = pd.DataFrame(A,index = idx, columns = cols)
我的数据是这样的
asset1 asset2
coper1 1 2
coper2 3 4
coper3 5 6
我想通过一个线性优化来运行它们(我有一些约束条件,比如所有asset_i <= amount_on_hand_i的和和coper_j = price_j的和) 所以我要把这个二维矩阵变成一维向量。哪个容易熔化
df2 = pd.melt(df,value_vars=['asset1','asset2'])
但现在,当我试图解开它,我得到一个6行数组与许多空白!
df2.pivot(columns = 'variable', values = 'value')
variable asset1 asset2
0 1.0 NaN
1 3.0 NaN
2 5.0 NaN
3 NaN 2.0
4 NaN 4.0
5 NaN 6.0
有什么方法来保存'coper'的一部分,我的索引,而使用熔体? 问题来源StackOverflow 地址:/questions/59378503/how-to-reshape-more-than-one-date-column-to-be-index
您需要通过reset_index和参数id_vars保存索引值:
df2 = pd.melt(df.reset_index(), id_vars='index',value_vars=['asset1','asset2'])
print (df2)
index variable value
0 coper1 asset1 1
1 coper2 asset1 3
2 coper3 asset1 5
3 coper1 asset2 2
4 coper2 asset2 4
5 coper3 asset2 6
然后支点工作很好:
print(df2.pivot(index='index',columns = 'variable', values = 'value'))
variable asset1 asset2
index
coper1 1 2
coper2 3 4
coper3 5 6
另一个可能的解决方案与堆栈:
df2 = df.stack().reset_index()
df2.columns = list('abc')
print (df2)
a b c
0 coper1 asset1 1
1 coper1 asset2 2
2 coper2 asset1 3
3 coper2 asset2 4
4 coper3 asset1 5
5 coper3 asset2 6
print(df2.pivot(index='a',columns = 'b', values = 'c'))
b asset1 asset2
a
coper1 1 2
coper2 3 4
coper3 5 6
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。