【问题标题】:Python: Reorder dataframe rows for specific set of groupPython:为特定组的数据帧行重新排序
【发布时间】:2023-01-14 09:16:40
【问题描述】:

作为对这个question的跟进,

只有 main_group 的一个子集应该被重新排序,其他的不排序。

例如main_group的值为CITRUSTOM/CAP需要重新排序,其余保持原样。请帮忙解决这个问题。

提前致谢!

【问题讨论】:

  • 您可以添加上一个问题的信息,所以这是独立的吗?
  • 这是一个很大的解释,所以已经添加了上一个的链接
  • @user12345 我建议你提供一个最小的例子(关于从你的其他问题派生的一个小例子的建议,请参阅我的回答)
  • 我投票关闭。这个问题不是独立存在的,限制了它对未来读者的实用性。

标签: python-3.x pandas dataframe


【解决方案1】:

假设这个输入:

   Category main_group  value
0     Fruit     CITRUS    1.0
1     Fruit     CITRUS    5.0
2     Fruit     CITRUS    0.0
3     Fruit    MANGOES    2.0
4     Fruit    MANGOES    1.0
5     Fruit    MANGOES    4.0
6     Fruit    MANGOES    0.0
7      Vegg    TOM/CAP    9.0
8      Vegg    TOM/CAP    2.0
9      Vegg    TOM/CAP    1.0
10     Vegg      ONION    0.0
11     Vegg      ONION    NaN

您只能使用 groupby.apply 对 CITRUS 和 TOM/CAP 进行排序:

to_sort = ['CITRUS', 'TOM/CAP']

out = (df
   .groupby(['Category', 'main_group'], group_keys=False, sort=False)
   .apply(lambda g: g.sort_values(by='value') if g.name[1] in to_sort else g)
)

输出:

   Category main_group  value
2     Fruit     CITRUS    0.0  #
0     Fruit     CITRUS    1.0  # this is now sorted
1     Fruit     CITRUS    5.0  #
3     Fruit    MANGOES    2.0     #
4     Fruit    MANGOES    1.0     # this remains
5     Fruit    MANGOES    4.0     #  unchanged
6     Fruit    MANGOES    0.0     #
9      Vegg    TOM/CAP    1.0  #
8      Vegg    TOM/CAP    2.0  # this is now sorted
7      Vegg    TOM/CAP    9.0  #
10     Vegg      ONION    0.0
11     Vegg      ONION    NaN

【讨论】:

    猜你喜欢
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    相关资源
    最近更新 更多