【问题标题】:Divide rows of a dataframe conditional on the value of one column根据一列的值划分数据框的行
【发布时间】:2021-06-11 13:26:33
【问题描述】:

我有一个数据框:

import pandas as pd

df1 = pd.DataFrame({"Line":['Sales', 'Volume', 'ANR', 'EBT'], "a":[10, 4, 64, 32],
         "b":[4, 8, 32, 48],
         "c":[16, 4, 8, 24]})

我想将每一行除以一个不同的常数。所以我想将“Sales”除以 10,“Volume”除以 1,“ANR”除以 100,“EBT”除以 1。我可以执行以下操作:

df2 = pd.DataFrame({"A":[10, 1, 100, 1]})
df3 = df1.iloc[:, 1:].div(df2.A, axis=0)

这让我得到了这个特定示例的正确答案。但我希望操作更智能。我希望它在 Line 列中查找值。如果是“销售额”,则除以 10 等。

原因是我正在使用的数据框有 1000 行。我不想创建和维护像 df2 这样的系列。

对于上面的例子,答案应该是这样的:

df3 = pd.DataFrame({"Line":['Sales', 'Volume', 'ANR', 'EBT'], "a":[1, 4, 0.64, 32],
         "b":[0.4, 8, 0.32, 48],
         "c":[1.6, 4, 0.8, 24]})

【问题讨论】:

    标签: pandas dataframe conditional-statements


    【解决方案1】:

    您可以将除数规则收集到字典中:

    div = {'Sales' : 10, 'Volume' : 1, 'ANR' : 100, 'EBT':1}
    

    然后将列“a”、“b”、“c”除以“Line”的mapdiv获得的列:

    df1[['a','b','c']] = df1[['a','b','c']].div( df1['Line'].map(div), axis = 0)
    df1
    

    获得

        Line    a       b       c
    0   Sales   1.00    0.40    1.60
    1   Volume  4.00    8.00    4.00
    2   ANR     0.64    0.32    0.08
    3   EBT     32.00   48.00   24.00
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-08
      • 2022-01-19
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-23
      相关资源
      最近更新 更多