我正在寻找一种有效的方法来连接和合并 pandas DataFrame 中关于某些标准的行

Posted

技术标签:

【中文标题】我正在寻找一种有效的方法来连接和合并 pandas DataFrame 中关于某些标准的行【英文标题】:I am looking for an efficient approach to concatenate and merge rows in pandas DataFrame with regard to some criteria 【发布时间】:2017-07-24 10:47:47 【问题描述】:

我正在为 pandas 中的数据集编写代码。为了简化我的问题,假设 L_1=2, 5, 8, 19 (L_1 中的元素按升序排序)。我想知道基于L1,如何生成另一个集合L_2 = (2,5), (2,8), (2,19), (5,8), (5,19), (8,19) 。那么,基于L2,如何再次生成另一个集合L_3 = (2,5,8), (2,5,19), (2,8,19), (5,8,19)。再次,基于L_3,如何生成L_4 = (2,5,8,19)。因此,从 L_(k-1) 生成 L_k 的基本思想是

1) L_k 中的每个元素都是一个 k 元组 (a_1,...,a_k) 使得 a_1

2) 如果 (a_1,...,a_(k-1)) 和 (b_1,...,b_(k-1)) 属于 L_(k-1),那么它们可以合并为如果 a_i = b_i, i = 1,..., k-2 和 a_(k-1)

我想知道如何通过 pandas 有效地生成上述集合,因为 L_1 可能有超过 10 万个元素。谢谢!

【问题讨论】:

【参考方案1】:

这应该可以满足您的需求:

l1 = [2, 5, 8, 19]
l2 = [(i, j) for i in l1 for j in l1[l1.index(i)+1:]]
l3 = [(i, j, k) for i, j in l2 for k in  l1[l1.index(j)+1:]]
l4 = [(i, j, k, l) for i, j, k in l3 for l in  l1[l1.index(k)+1:]]

【讨论】:

谢谢 zipa。事实上,索引 i,j,k, ... 的数量可以达到 100k。我尽量避免这种情况。

以上是关于我正在寻找一种有效的方法来连接和合并 pandas DataFrame 中关于某些标准的行的主要内容,如果未能解决你的问题,请参考以下文章

Pandas:合并数据框并将多个连接值合并到一个数组中

Pandas 通过取列之间的平均值来合并两个数据框

将 2 列中的值合并为 pandas 数据框中的单列

将组平均值分配给 python/pandas 中的每一行

在Pandas DataFrame中返回包含字符串的第一个单元格 - 最有效的方法?

一文搞定Pandas中的数据合并