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

如何在 Pandas 数据帧组中移动一列,然后重新加入单个数据帧?

如何在 Pandas 数据帧组中移动一列,然后重新加入单个数据帧?

郎朗坤 2021-11-16 16:21:23
如果我有这样的数据框:category name index A        A11   1A        A12   1A        A13   1A        A21   2A        A22   2A        A23   2...B        B11   1B        B21   2...我想首先按类别和索引对数据框进行分组,在每个组内我想name按索引值(反向移位)- 1 移动列。所以结果会是这样的:category name index A        A11   1    # Do not shift anything because index is 1A        A12   1A        A13   1A        A22   2    # Shift -1 for anything in (A, 2) group because index here is 2A        A23   2A        A24   2...B        B11   1B        NA    2  # at the end of each group it should be NA我曾尝试使用 .groupby() 然后使用 .apply() 但似乎没有简单的方法将结果连接回数据帧。貌似apply方法只能返回一个系列。我如何使用 apply 方法实现这一目标?
查看完整描述

2 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

如果我理解你的问题


l=[y.assign(name=y.name.shift(-x[1]+1).values) for x , y in df.groupby(['category','index'])]


Newdf=pd.concat(l)

Newdf

Out[644]: 

  category name  index

0        A  A11      1

1        A  A12      1

2        A  A13      1

3        A  A23      2

4        A  A24      2

5        A  NaN      2


查看完整回答
反对 回复 2021-11-16
?
哆啦的时光机

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

如果我理解正确,我认为你可以做到这一点的一种方法:


给定 df,


  category name  index

0        A  A11      1

1        A  A12      1

2        A  A13      1

3        A  A21      2

4        A  A22      2

5        A  A23      2

6        B  B11      1

7        B  B21      2

使用查询过滤索引不是 1 的地方,然后groupby在索引等于 1 的过滤器数据帧的内部移位并连接部分到移位的数据帧。


df_shifted = (df.query("index > 1").groupby(['category','index'])

                                   .apply(lambda x: x['name'].shift(-1))

                .reset_index().set_index('level_2').rename_axis(None))


df_out = pd.concat([df_shifted, df.query("index == 1")], sort=False).sort_index()

df_out

输出:


  category  index name

0        A      1  A11

1        A      1  A12

2        A      1  A13

3        A      2  A22

4        A      2  A23

5        A      2  NaN

6        B      1  B11

7        B      2  NaN


查看完整回答
反对 回复 2021-11-16
  • 2 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信