python - 如何使用 python 中的最小内存使用量将数据框的子选择划分为另一个数据框?

标签 python pandas dataframe

我有一个包含许多列的数据框,我想以最小的内存使用量以固定的列间隔将其除以另一个数据框。

例如:

df1 = pd.DataFrame([[1,2,3,4,5,6,7,8,9,10], [10,9,8,7,6,5,4,3,2,1], [2,4,3,1,6,5,7,8,9,4]])
df2 = pd.DataFrame([[1,3],[7,6],[9,3]])

我想每隔两列将 df1 除以 df2 多次。我想要的结果是:

finalDf = pd.DataFrame([[1/1,2/3,3/1,4/3,5/1,6/3,7/1,8/3,9/1,10/3], [10/7,9/6,8/7,7/6,6/7,5/6,4/7,3/6,2/7,1/6], [2/9,4/3,3/9,1/3,6/9,5/3,7/9,8/3,9/9,4/3]])

我认为代码应该是这样的:

df3 = df1.iloc[:, 0:2].divide(df2.iloc[:,:].values, axis = 'rows')
df4 = df1.iloc[:, 2:4].divide(df2.iloc[:,:].values, axis = 'rows')
df5 = df1.iloc[:, 4:6].divide(df2.iloc[:,:].values, axis = 'rows')
df6 = df1.iloc[:, 6:8].divide(df2.iloc[:,:].values, axis = 'rows')
finalDf = pd.concat([df3, df4, df5, df6], axis=1)

我认为实现类似功能的唯一方法是将其放入循环中,但我觉得这不是明智的做法。有没有办法矢量化解决方案?

最佳答案

使用pd.concat:

res = pd.concat([df2]*5, 1)
res.columns = df1.columns

df1/res

          0         1         2         3    ...            6         7         8         9
0  1.000000  0.666667  3.000000  1.333333    ...     7.000000  2.666667  9.000000  3.333333
1  1.428571  1.500000  1.142857  1.166667    ...     0.571429  0.500000  0.285714  0.166667
2  0.222222  1.333333  0.333333  0.333333    ...     0.777778  2.666667  1.000000  1.333333

归纳:

res = pd.concat([df2]*(df1.shape[1]//df2.shape[1]), 1)

关于python - 如何使用 python 中的最小内存使用量将数据框的子选择划分为另一个数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52284482/

相关文章:

python - xlwt 词典列表

python - 使用 python 下载 HLS ( HTTP ) 流视频

python - 按特定顺序向 Pandas DataFrame 添加值和列

python - 意外类型 : <class 'pyspark.sql.types.DataTypeSingleton' > when casting to Int on a ApacheSpark Dataframe

r - 如何在 R 中的多个可选键上加入 2 个数据帧,即(key1 或 Key2)其中一个或两个匹配

python - 是否可以在 reStructuredText 中将部分放在容器内?

python - 在 Pandas 数据框中的特定列中查找所有具有空值的行的索引

python - Pandas 从多行创建链接对

r - 如何让 R 逐行搜索大型数据集以查找两列之一中是否存在值,然后在数据丢失时返回一个值

python - 求递归函数的时间和空间复杂度