使用Pandas数据帧按多个参数进行分组

时间:2016-05-19 18:01:37

标签: python pandas grouping enumerate

我有一个数据框,我想通过两个参数进行分组(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包括前两行,因为30和31是连续的,第二列是匹配的。 创建组2是因为第1列中的31和35不连续。 创建组3是因为H和E不匹配。

我正在尝试使用groupby并一起枚举,但我似乎无法将它们组合在一起。

Identify groups of continuous numbers in a list

grouping rows in list in pandas groupby

我很欣赏有关如何组合选择的任何提示

1 个答案:

答案 0 :(得分:0)

我对你的意思采取了一些自由。如果我理解正确,请告诉我。

设置:copy&粘贴以设置问题

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

但是,部分问题没有意义。希望这很有用。