python pandas在组内排序并应用函数

2024-05-15 00:56:08 发布

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

假设我有虹膜数据集。有没有办法在大熊猫身上简洁地执行以下操作?在

  1. 按目标分组
  2. 在每组中,按“萼片长度(cm)”降序排列数据
  3. 在每个组中,前5行分配1,其余行分配0?在

对于那些知道R的人,我只想复制以下代码(是的,这是一个变通方法):

iris %>%
  group_by(Species) %>%
  arrange(desc(Sepal.Length)) %>%
  mutate(size_tag = 1,
         size_tag = cumsum(size_tag),
         size_tag = ifelse(size_tag <= 5, 1, 0))

到目前为止,我已经:

^{pr2}$

我得到的结果是一个附加到数据帧的额外行。。。在

我刚刚开始使用pandas和Python,所以欢迎发表任何评论(例如编码风格相关)。在


Tags: 数据代码iris目标sizebytaggroup
2条回答

我复制了你的R数据帧,我认为这是同样的事情:

iris = iris.sort_values(['target', 'sepal length (cm)'], ascending=False)
iris['size_tag'] = iris.index.isin(iris.groupby('target').head(5).index)*1

我们首先根据物种对数值进行排序,然后根据每个物种组内的萼片长度进行排序。然后我们在每个组的前5个位置添加标签。在

得到这个序列的0和1

iris.sort_values(
    'sepal length (cm)', ascending=False
).groupby('target').cumcount().__floordiv__(5).eq(0).astype(np.uint8)

更具可读性

^{pr2}$

用新列生成副本

s = iris.sort_values('sepal length (cm)', ascending=False)
c = s.groupby('target').cumcount()
top5 = ((c // 5) == 0).astype(np.uint8)
iris.assign(size_tag=top5)

enter image description here

相关问题 更多 >

    热门问题