单级到多级数据帧

2024-06-16 04:19:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含许多列的数据帧

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('||')

并有一个值元组作为列名,例如('a','b') 如何将commmon中元组的第一个(或者第二个)元素所在的列重新组合在一起


Tags: columns数据元素dataframedfdatanprandom
1条回答
网友
1楼 · 发布于 2024-06-16 04:19:05

^{}与参数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

相关问题 更多 >