如何将数据框列表除以值列表?

Posted

技术标签:

【中文标题】如何将数据框列表除以值列表?【英文标题】:How can I divide a list of dataframes by a list of values? 【发布时间】:2019-04-10 17:47:24 【问题描述】:

(1) 我有一个包含 29 个数据框的列表

(2) 我有一个包含 29 个值的列表(都是 int64)

我想将列表中的一列从 (1) 中除以 (2) 中的每个值——它们的顺序正确我想将它们除以

例如,我希望列表 1 中的第一个数据框(第二列中的所有值)除以列表 2 中的第一个值。我希望列表 1 中的第二个数据框(第二列中的所有值)为除以列表 2 中的第二个值,依此类推。例如:

这是我的第一个列表中的第 6 个数据框:

    print(lst_1[6]):

   ITIS  q9036
0   7.0      7
1   2.0      5
2   1.0      4
3   3.0      3
4   5.0      2

这是我第二个列表中的第 6 个整数,值为 14:

print(lst_2[6]):

array([[14]], dtype=int64

所以我想要达到的结果是这样的:

   ITIS  q9036  Total  Result
0   7.0      7  14     0.50
1   2.0      5  14     0.36     
2   1.0      4  14     0.29
3   3.0      3  14     0.21
4   5.0      2  14     0.14

我想对所有 29 个整数的所有 29 个数据帧执行此操作

其他注意事项:第二列总是有不同的名称

【问题讨论】:

【参考方案1】:

zipassign 使用列表推导,因为每个整数都在numpy 数组中,必须由[0][0] 选择:

dfs = [df.assign(total = i[0][0], 
                 result = df.iloc[:, -1] / i[0][0]) for i, df in zip(lst_2, lst_1)]

编辑:

dfs = [df.assign(total = i[0][0], 
                 a = df.iloc[:, -1] / i[0][0])
        .rename(columns='a':'_pct'.format(df.columns[-1])) for i, df in zip(lst_2, lst_1)]

【讨论】:

不幸的是,这不起作用...“ValueError:传递的项目数量错误 2,位置意味着 1” @DanONS - 所以总是需要划分第二列? @DanONS 解决方案已修改为除以最后一列 @DanONS - 我使用技巧 - 创建列 a 然后重命名它。 感谢 Jezrael,你真的很有帮助

以上是关于如何将数据框列表除以值列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何将列表中的值分配给熊猫数据框并控制每个列表元素在数据框中的分布/频率

如何将下拉选择框列表中用户选择的选项的值存储到 mysql 数据库中?

如何将元组列表转换为 pandas 数据框,以便每个元组的第一个值代表一列?

如何使用pyspark将具有多个可能值的Json数组列表转换为数据框中的列

Pyspark:如何将现有非空列的元组列表作为数据框中的列值之一返回

如何将每个值与列表对象中每个元素中的最大值相除