pandas - 根据一列的值划分数据框的行
问题描述
我有一个数据框:
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]})
我想将每一行除以不同的常数。所以我想将“销售额”除以 10,“量”除以 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]})
解决方案
您可以将除数规则收集到字典中:
div = {'Sales' : 10, 'Volume' : 1, 'ANR' : 100, 'EBT':1}
然后将列'a','b','c'除以map
'Line'的a获得的列div
:
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
推荐阅读
- bash - 将 bash 代码回显到 .sh 文件以执行混合变量
- python - 一次处理大图像并存储结果以供以后使用的最有效方法是什么?
- javascript - 如何在 css 文件中使用 API 颜色变量?
- objective-c - Objective-c NSError 接口类型不能静态分配
- javascript - 如何在松弛通道中发送私人消息?
- delphi - 如果属性无法更新变量,则返回 false
- c# - 用最小起订量验证方法用参数调用一次
- excel-formula - 每次数据变化如何汇总数据?
- hadoop - 格式化namenode时“'C:\ Program'无法识别”
- android - 片段中未调用 registerForActivityResult