为了账号安全,请及时绑定邮箱和手机立即绑定

扁平化熊猫df

扁平化熊猫df

千巷猫影 2021-04-02 14:11:15
我正在尝试flatten一个pandas df。对于df下面的内容,我尝试将名称上Column E移,并将其他列向右移动。import pandas as pdd = ({    '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  H0  X  Stop  En  08:00:00     M  Place  11        X   X         X  John          2  X   Res  Se  08:10:00     M  Place  13        X   X         X  Gary          而我的预期输出是:   A     B   C         D     E      F  G0  X  Stop  En  08:00:00  John  Place  11  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  
查看完整描述

3 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

假设:示例中看到的“每隔一行”的规则适用于整个数据集


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)


查看完整回答
反对 回复 2021-04-13
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

这是一种实现方法:


df = df.reindex(sorted(df.columns), axis=1)


sliced = df[::2].copy()


# creating a slot for the 'E' column

sliced.rename(columns={'E': 'F', 'F': 'G'}, inplace=True)    

sliced['E'] = df[1::2]['E'].values


sliced = sliced.reindex(sorted(sliced.columns), axis=1)

输出:


   A     B   C         D     E  F      G  H

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

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


查看完整回答
反对 回复 2021-04-13
  • 3 回答
  • 0 关注
  • 228 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号