繁体   English   中英

根据一列值的组合有效拆分 pandas dataframe

[英]Efficiently split pandas dataframe based on combinations of one column values

假设我有一个 dataframe 有一列,它有 3 个唯一值

点击这里查看输入

import pandas as pd
df = pd.DataFrame(['a', 'b', 'c'], columns = ['string'])
df

我想将此 dataframe 拆分为更小的数据帧,这样每个 dataframe 将包含 2 个唯一值。 在上述情况下,我需要 3 个数据帧 3c2(nCr) = 3。df1 - [ab] df2 - [ac] df3 - [bc]。 请点击下面的链接查看我当前的实现。

单击此处查看当前代码和 output

import itertools
for i in itertools.combinations(df.string.values, 2):
    print(df[df.string.isin(i)], '\n')

我在 pandas 中寻找类似 groupby 的东西。 因为循环内的子设置数据非常耗时。 在一个示例案例中,我有 609 个唯一值,完成循环大约需要 3 分钟。 因此,寻找一些优化的方法来执行相同的操作,因为在真实场景中唯一值可能会高达 1000 个。

它会很慢,因为您正在创建 370k 数据帧。 如果它们都应该只包含两个值,为什么它需要是 dataframe?

df = pd.DataFrame({'x': range(100)})
df['key'] = 1
records = df.merge(df, on='key').drop('key', axis=1).to_dict('r')
[pd.Series(x) for x in records]

您会看到records的计算速度非常快,但是生成所有这些系列对象需要几分钟。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM