猿问

扁平化熊猫df

我正在尝试flatten一个pandas df。对于df下面的内容,我尝试将名称上Column E移,并将其他列向右移动。


import pandas as pd


d = ({

    'D' : ['08:00:00','X','08:10:00','X'],

    'H' : ['1','','1',''],           

    'B' : ['Stop','X','Res','X'],

    'A' : ['X','','X',''],

    'C' : ['En','X','Se','X'],

    'E' : ['M','John','M','Gary'],

    'F' : ['Place','','Place',''],

    })


df = pd.DataFrame(data=d)

输出:


   A     B   C         D     E      F  H

0  X  Stop  En  08:00:00     M  Place  1

1        X   X         X  John          

2  X   Res  Se  08:10:00     M  Place  1

3        X   X         X  Gary          

而我的预期输出是:


   A     B   C         D     E      F  G

0  X  Stop  En  08:00:00  John  Place  1

1  X   Res  Se  08:10:00  Gary  Place  1

我已经尝试过


df = pd.DataFrame(np.column_stack((df.iloc[::2], df.iloc[1::2, [0]])), columns=['A','B','C','D','E','F','G','H'])

但这会删除名称:


   A     B   C         D  E      F  G  H  

0  X  Stop  En  08:00:00  M  Place  1   

1  X   Res  Se  08:10:00  M  Place  1  


千巷猫影
浏览 229回答 3
3回答

梦里花落0921

假设:示例中看到的“每隔一行”的规则适用于整个数据集df2 = df[df.columns[:4]].iloc[::2].reset_index(drop=True)df3 = df[df.columns[4]].iloc[1::2].reset_index(drop=True)df4 = df[df.columns[5:]].iloc[::2].reset_index(drop=True)pd.concat([df2, df3, df4], axis=1)

慕田峪4524236

这是一种实现方法:df = df.reindex(sorted(df.columns), axis=1)sliced = df[::2].copy()# creating a slot for the 'E' columnsliced.rename(columns={'E': 'F', 'F': 'G'}, inplace=True)    sliced['E'] = df[1::2]['E'].valuessliced = sliced.reindex(sorted(sliced.columns), axis=1)输出:   A     B   C         D     E  F      G  H0  X  Stop  En  08:00:00  John  M  Place  12  X   Res  Se  08:10:00  Gary  M  Place  1
随时随地看视频慕课网APP

相关分类

Python
我要回答