【问题标题】: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 个数据帧执行此操作

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

【问题讨论】:

    标签: python pandas list loops dataframe


    【解决方案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,你真的很有帮助
    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    相关资源
    最近更新 更多