在每列之间依次插入列差

2024-04-26 10:36:36 发布

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

我有一个单行数据帧计数的结果,如下所示:

Users Address Email Phone Work
552    343     207   117   57

我想在每列之间插入第二列和前一列之间的差异,以便得到:

Users DiffAdd Address DiffEmail  Email DiffPhone Phone  DiffWork Work
 552    -209   343      -136      207     -90     117      -60    57

或者,如果可能的话,我只需将每列的值替换为相应的差值,结果如下:

 Users Address Email  Phone Work 
 552    -209   -136    -90  -60    

我试着做后一种情况,以便用差值替换该值,但这会立即将新值应用于下一次计算,因此我得到了没有意义的野值

谢谢大家!


Tags: 数据addressemail情况phone差异userswork
1条回答
网友
1楼 · 发布于 2024-04-26 10:36:36

使用:

  • 通过^{}获取所有列的差异,通过^{}更改列名称
  • ^{}按列axis=1
  • 通过使用子集[]展平压缩的两个列名称,对列名称重新排序
  • 通过^{}删除第一列

df1 = df.diff(axis=1).add_prefix('Diff')
df = pd.concat([df, df1], axis=1)

c = list(sum(zip(df1.columns, df.columns), ()))
print (c)
['DiffUsers', 'Users', 'DiffAddress', 'Address', 'DiffEmail',
 'Email', 'DiffPhone', 'Phone', 'DiffWork', 'Work']

df = df[c].iloc[:, 1:]
print (df)

   Users  DiffAddress  Address  DiffEmail  Email  DiffPhone  Phone  DiffWork  \
0    552       -209.0      343     -136.0    207      -90.0    117     -60.0   

   Work  
0    57  

或者:

df2 = df.diff(axis=1).fillna({'Users':df['Users']})
print (df2)
   Users  Address  Email  Phone  Work
0  552.0   -209.0 -136.0  -90.0 -60.0

相关问题 更多 >