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

熊猫:枚举每组中的项目

熊猫:枚举每组中的项目

隔江千里 2021-06-13 12:13:21
我有一个像    id   chi  prop   ord 0   100   L    67     0 1   100   L    68     1 2   100   L    68     2 3   100   L    68     3 4   100   L    70     0 5   100   L    71     0 6   100   R    67     0 7   100   R    68     1 8   100   R    68     2 9   100   R    68     3 10  110   R    70     0 11  110   R    71     0 12  101   L    67     0 13  101   L    68     0 14  101   L    69     0 15  101   L    71     0 16  101   L    72     0 17  201   R    67     0 18  201   R    68     0 19  201   R    69     0ord当 ( prop,chi和id) 都具有相同的值时,本质上给出了条目的顺序。但这不是我想要的。相反,我希望能够枚举{(id, chi)}从 0 到 n_g的每个组 g 的条目,其中 n_g 是组 g 的大小。所以我想获得一些看起来像    id   chi  prop   count 0   100   L    67     0 1   100   L    68     1 2   100   L    68     2 3   100   L    68     3 4   100   L    70     4 5   100   L    71     5 6   100   R    67     0 7   100   R    68     1 8   100   R    68     2 9   100   R    68     3 10  110   R    70     0 11  110   R    71     1 12  101   L    67     0 13  101   L    68     1 14  101   L    69     2 15  101   L    71     3 16  101   L    72     4 17  201   R    67     0 18  201   R    68     1 19  201   R    69     2我想知道是否有一种简单的方法可以使用pandas. 以下非常接近,但感觉太复杂了,由于某种原因,它不会让我join得到原始数据框的结果数据框。(df.groupby(['id', 'chi'])   .apply(lambda g: np.arange(g.shape[0]))   .apply(pd.Series, 1)   .stack()   .rename('counter')   .reset_index()            .drop(columns=['level_2']))编辑:第二种方式当然是for循环方式,但我正在寻找比以下更“Pythonic”的东西:for gname, idx in df.groupby(['id','chi']).groups.items():    tmp = df.loc[idx]    df.loc[idx, 'counter'] = np.arange(tmp.shape[0])R 有一种非常简单的方法可以使用tidyverse包来实现这种行为,但是我还没有找到使用pandas. 非常感谢提供的任何帮助!
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

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