我有一个包含许多列的数据框
pd.DataFrame(data=np.random.rand(10,4),columns=['a||b','a||c','b||d','b||e'])
a||b a||c b||d b||e
0 0.920209 0.913427 0.269640 0.305458
1 0.015503 0.537648 0.668155 0.456014
2 0.535996 0.908736 0.262496 0.950372
3 0.271928 0.187117 0.501474 0.351366
4 0.362223 0.308811 0.948894 0.649872
5 0.255547 0.264383 0.755152 0.339240
6 0.908696 0.014974 0.179077 0.956830
7 0.912979 0.912669 0.062033 0.518936
8 0.705435 0.209669 0.398958 0.131777
9 0.897860 0.420016 0.172101 0.294667
我想从这个数据帧派生出一个具有列的新多级数据帧 第一级'a'和'b,第二级'b','c','d','e'。
我可以单独拆分列名:
df.columns[0].split('||')
并且有一个值元组作为列名,例如( '一个', 'b')的 如何在commmon中将具有元组的第一个(或可能是第二个)元素的列组合在一起?
答案 0 :(得分:1)
使用split
与parameetr expand=True
:
ddf.columns = ddf.columns.str.split('\|\|', expand=True)
print (ddf)
a b
b c d e
0 0.248756 0.163067 0.783643 0.808523
1 0.625628 0.604114 0.885702 0.759117
2 0.181105 0.150169 0.435679 0.385273
3 0.575710 0.146091 0.686593 0.468804
4 0.569999 0.645701 0.723341 0.680671
5 0.180917 0.118158 0.242734 0.008183
6 0.360068 0.146042 0.542723 0.857103
7 0.200212 0.134633 0.213594 0.973156
8 0.858330 0.533785 0.434459 0.187193
9 0.288276 0.627167 0.355706 0.729455
编辑:
np.random.seed(456)
ddf = pd.DataFrame(data=np.random.rand(10,4),columns=['a||b||e','a||c','b||d','b||e'])
ddf.columns = ddf.columns.str.split('\|\|', expand=True)
print (ddf)
a b
b c d e
e NaN NaN NaN
0 0.248756 0.163067 0.783643 0.808523
1 0.625628 0.604114 0.885702 0.759117
2 0.181105 0.150169 0.435679 0.385273
3 0.575710 0.146091 0.686593 0.468804
4 0.569999 0.645701 0.723341 0.680671
5 0.180917 0.118158 0.242734 0.008183
6 0.360068 0.146042 0.542723 0.857103
7 0.200212 0.134633 0.213594 0.973156
8 0.858330 0.533785 0.434459 0.187193
9 0.288276 0.627167 0.355706 0.729455
mux = ddf.columns.to_frame().dropna(axis=1).values.tolist()
print (mux)
[['a', 'b'], ['a', 'c'], ['b', 'd'], ['b', 'e']]
ddf.columns = pd.MultiIndex.from_tuples(mux)
print (ddf)
a b
b c d e
0 0.248756 0.163067 0.783643 0.808523
1 0.625628 0.604114 0.885702 0.759117
2 0.181105 0.150169 0.435679 0.385273
3 0.575710 0.146091 0.686593 0.468804
4 0.569999 0.645701 0.723341 0.680671
5 0.180917 0.118158 0.242734 0.008183
6 0.360068 0.146042 0.542723 0.857103
7 0.200212 0.134633 0.213594 0.973156
8 0.858330 0.533785 0.434459 0.187193
9 0.288276 0.627167 0.355706 0.729455