【问题标题】:Grouping by multiple parameters using Pandas dataframe使用 Pandas 数据框按多个参数分组
【发布时间】:2016-05-19 18:01:36
【问题描述】:

我有一个数据框,我想按两个参数(1)同一第一列中的连续编号和(2)第二列中的匹配值进行分组

数据框:

In [20]: import pandas as pd

In [21]: df1 = pd.DataFrame ({ "res": [30, 31, 35, 36], "ss": ["H", "H", "H", "E"], "AA": ["A", "B", "C", "D"]})

In [22]: df1
Out[22]:
   res ss AA
0  30  H  A
1  31  H  B
2  35  H  C
3  36  E  D

期望的输出:

group 1: (30, H, A), (31, H, B)

group 2: (35, H, C)

group 3: (36, E, D)

第 1 组包括前 2 行,因为 30 和 31 是连续的,并且第二列匹配。 由于第 1 列中的 31 和 35 不连续,因此创建了第 2 组。 第 3 组已创建,因为 H 和 E 不匹配。

我正在尝试将 groupby 和 enumerate 一起使用,但我似乎无法将它们结合起来。

Identify groups of continuous numbers in a list

grouping rows in list in pandas groupby

感谢任何关于如何组合选择的提示

【问题讨论】:

  • 我根本不明白你想要的输出。什么是“AB、C、D”,你如何从df1 得到它?请编辑您的问题,使其更具体。
  • @DSM 我编辑了我的问题。希望现在更清楚了。

标签: python pandas grouping enumerate


【解决方案1】:

我对你的意思有些随意。如果我理解正确,请告诉我。

设置:复制粘贴设置问题

import pandas as pd

df1 = pd.DataFrame ({"res": [30, 31, 35, 36],
                     "ss": ["H", "H", "H", "E"],
                     "AA": ["A", "C", "D", "B"]})  # I made 'F' a 'B'

df1

df1 看起来像:

  AA  res ss
0  A   30  H
1  C   31  H
2  D   35  H
3  B   36  E

我相信你只想sort 而不是groupby

解决方案

print df1.sort_values(['AA', 'res'])

看起来像:

  AA  res ss
0  A   30  H
3  B   36  E
1  C   31  H
2  D   35  H

但是,您的部分问题没有意义。希望这会有所帮助。

【讨论】:

  • 抱歉,我把列搞混了。第 1 列应该有数字。第二列应该有“H”或“E”,最后一列应该有字母。我想创建第一列连续且第二列匹配的组。即一个组的 30、H、A 和 31、H、B。 35、H、D 是一个新组,因为 31 和 35 不连续。 36, E, C 将是一个新组,因为 H 和 E 不匹配。
猜你喜欢
  • 2021-09-22
  • 1970-01-01
  • 2019-04-20
  • 2020-02-17
  • 1970-01-01
  • 2019-03-20
  • 2013-05-17
  • 2017-04-06
  • 2021-02-07
相关资源
最近更新 更多