python - 使用两个 DataFrame 的 Pandas groupby 总和

标签 python pandas optimization dataframe sum

我有两个非常大的 Pandas DataFrame,想用它们在快速求和运算中相互引导。两个框架看起来像这样:

第 1 帧:

SampleName  Gene1   Gene2   Gene3
Sample1         1       2       3
Sample2         4       5       6
Sample3         7       8       9

(实际上,Frame1 大约有 1,000 行 x ~300,000 列)

第 2 帧:

FeatureName GeneID
Feature1    Gene1
Feature1    Gene3
Feature2    Gene1
Feature2    Gene2
Feature2    Gene3

(实际上,Frame2 约为 350,000 行 x 2 列,具有约 17,000 个独特的特征)

我想通过 Frame2 的基因组对 Frame1 的列求和。例如,上述两个帧的输出将是:

SampleName  Feature1    Feature2
Sample1            4           6
Sample2           10          15
Sample3           16          24

(实际上,输出将是 ~1,000 行 x 17,000 列)

有没有什么方法可以用最少的内存使用来做到这一点?

最佳答案

如果您想减少内存使用,我认为您最好的选择是迭代第一个 DataFrame,因为它只有 1k 行。

dfs = []
frame1 = frame1.set_index('SampleName')
for idx, row in frame1.iterrows():
    dfs.append(frame2.join(row, on='GeneID').groupby('FeatureName').sum())
pd.concat(dfs, axis=1).T

产量

FeatureName  Feature1  Feature2
Sample1             4         6
Sample2            10        15
Sample3            16        24

关于python - 使用两个 DataFrame 的 Pandas groupby 总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39199343/

相关文章:

linq - 使用 Entity Framework 进行动态 Linq 查询

python - 在一次更新中在 pandas 数据框中创建多个列

python - 找到两个列表的每个元素之间的最大差异

python - 获取python中2个数据帧之间的差异数

python - 如何将输出显示为整数而不是实数

python - 在 Pandas 中使用 groupby 查找重复项

c++ - 从源代码编译与 deb 包编译

c++ - 从多个线程收集结果的缓存友好方式

python - 在Python中Unpickling "None"对象

python - 如何在 Python 中将字符串转换为 utf-8