按一列或另一列对熊猫数据框进行分组

三井

这是我的数据框:

df = pd.DataFrame({'name' : ['name1', 'name2', 'name1', 'name3'],
                    'rate' : [1,2,2,3],
                    'id' : range(4)})

   id   name  rate
0   0  name1     1
1   1  name2     2
2   2  name1     2
3   3  name3     3

我想对pandas数据框的行进行分组,如果它们在columnname或column中具有相同的值rate

          id            name       rate
0  [0, 1, 2]  [name1, name2]  [1, 2, 2]
1        [3]           name3        [3]

我有一个巨大的数据框,所以我不想遍历每一行(除非是唯一的解决方案)。我该怎么办 ?

(我可以使用Numpy数组代替Pandas数据框)

阿米·塔沃里(Ami Tavory)

您的条件无限制地传递。如果在第2i,2i + 1行中共享名称,在第2i + 1、2i + 1中共享速率,则需要保持链接行。

解决这一问题的一种方法是使用图论的连通分量算法

在此处输入图片说明

为此,您可以使用networkx在代码中,可能如下所示:

import networkx as nx
import itertools

G = nx.Graph()
G.add_nodes_from(df.id)
G.add_edges_from(
    [(r1[1]['id'], r2[1]['id']) for (r1, r2) in itertools.product(df.iterrows(), df.iterrows()) if r1[1].id < r2[1].id and (r1[1]['rate'] == r2[1]['rate'] or r1[1]['name'] == r2[1]['name'])]
)

让我们创建一group列,为每一行指示其组:

df['group'] = df['id'].map(
    dict(itertools.chain.from_iterable([[(ee, i) for ee in e] for (i, e) in enumerate(nx.connected_components(G))])))
>>> df.group
0    0
1    0
2    0
3    1

现在,您只需要groupby在group列上应用即可list

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

熊猫按另一列中的值对一列进行排序

熊猫数据框:按两列分组,然后对另一列取平均值

熊猫数据框按两列分组,并总结一列

按一列将Pandas数据框分组,然后根据另一列删除行

熊猫按一列分组将另一列的值连接为定界列表

熊猫如何在分组到另一列时按分组大小对分组依据进行排序

熊猫按另一列的平均值对一列的值进行排序

Python数据框如何按一列分组并获得另一列的总和

熊猫:按多列分组,将一列串联,同时添加另一列

在一列上按另一列对数据框进行排序-Pandas

在熊猫数据框中按另一列分组后如何插入缺失的日期并向前填充列

熊猫分组但保留另一列

将数据框按列分组,并在另一列中压缩字符串

按一列过滤熊猫数据框,并在另一列中获取值的总和

使用差异对列进行分组并在熊猫中按另一列对另一列进行排序

熊猫数据框分组列的一列差异图

按变量索引将一列数据框分组

熊猫Slinear插值按另一列分组

对熊猫数据框中的一列求和,其中一列满足条件,但另一列分组

数据框按一列分组,并平均一列,而发现大多数发生在另一列

按一列重复进行分组,但显示另一列

将熊猫数据框列中的单词按另一列分组以获得频率/计数

返回按一列排序并按另一列分组的 SQL 数据

pandas 数据框按列分组,并根据计数分别更新另一列的行

熊猫汇总按另一列分组的行

对按另一列分组的熊猫数据框列值求和,然后用总和更新行并删除重复项

计算数据框列中列表项的出现次数,按另一列分组

如何根据一列对数据框进行分组并根据另一列进行转置

如何在熊猫中按一列或另一列分组