我有一个类似于下面的数据帧
import pandas as pd
df = pd.DataFrame(data={"CommonIdentifier":[1234,1235,1236,1237],
"CommonValue":["type1","type2","type1","type1"],
"Identifier1":["a","a","b","b"],
"Value1":[1,1.5,2,1.3],
"Identifier2":["b","b","c","a"],
"Value2":[4,2,3.2,1]})
df
CommonIdentifier CommonValue Identifier1 Identifier2 Value1 Value2
0 1234 type1 a b 1.0 4.0
1 1235 type2 a b 1.5 2.0
2 1236 type1 b c 2.0 3.2
3 1237 type1 b a 1.3 1.0
我想操纵它,使它具有形式
^{pr2}$以上只是代表性的,实际上我有9个标识符/值对。我在想我怎样才能简洁地完成这件事。我提出了以下建议
num_identifiers = 2
m1 = pd.melt(df,id_vars=['CommonIdentifier'],
value_vars=['Value1','Value2'])
m2 = pd.melt(df,id_vars=['CommonIdentifier'],
value_vars=['Identifier1','Identifier2'])
m3 = pd.concat([df[["CommonIdentifier","CommonValue"]]] * num_identifiers)
m3.index = range(len(m3))
pd.concat([m3[["CommonIdentifier","CommonValue"]],
m2[["value"]].rename(columns={"value":"IdentifierJoined"}),
m1[["value"]].rename(columns={"value":"ValueJoined"})], axis=1)
它完成了这一转变,但感觉相当草率/冗长
下面是一个使用
MultiIndex
、stack()
和merge()
的方法:您可以使用
df[[...]]
来选择所需的列,rename(columns=...)
更改列名,然后pd.concat
要堆叠子数据帧:收益率
^{pr2}$另一个受HYRY解决方案启发的选择是隐藏索引中的公共列,然后应用HYRY的
stack
ing技巧:相关问题 更多 >
编程相关推荐