当前位置: 首页 > 知识库问答 >
问题:

如何在其他几列的基础上添加权重列?

冷正信
2023-03-14

我有以下名为“生产”的熊猫数据框架,并希望根据其种类、温室和年/月获得每种植物生产的重量

plant  species  greenhouse  produce  year_month
0001     S1         GH1       200      2020-05
0002     S1         GH1       200      2020-05
0003     S2         GH1       100      2020-05
0004     S2         GH1        50      2020-05
0005     S1         GH2        90      2020-05
0006     S2         GH2        60      2020-05
0007     S1         GH1       150      2020-04
0008     S1         GH2       250      2020-04
0009     S1         GH2       100      2020-04
0010     S2         GH2       150      2020-04
0011     S2         GH2       190      2020-04
0012     S2         GH2        10      2020-04

例如,对于“2020-05”,我们有GH1和GH2。在GH1中,S1(工厂0001和0002)的总产量为400(200),因此工厂0001的重量为0.50,工厂0002的重量为0.50。S2的总产量为150(100 50);因此,我们将植物0003的重量定为0.66(100/150),将植物0004的重量定为0.33(50/150)。等等

我想生成这些条件分组权重,并将它们分配为数据框的新列,这样结果看起来是这样的:

plant  species  greenhouse  produce  year_month  contribution_weight
0001     S1         GH1       200      2020-05        0.50
0002     S1         GH1       200      2020-05        0.50
0003     S2         GH1       100      2020-05        0.66
0004     S2         GH1        50      2020-05        0.33
0005     S1         GH2        90      2020-05        1.00
0006     S2         GH2        60      2020-05        1.00
0007     S1         GH1       150      2020-04        1.00
0008     S1         GH2       250      2020-04        0.71
0009     S1         GH2       100      2020-04        0.29
0010     S2         GH2       150      2020-04        0.42
0011     S2         GH2       190      2020-04        0.54
0012     S2         GH2        10      2020-04        0.02

如何以编程方式添加“贡献\权重”列?

共有1个答案

闻人思聪
2023-03-14

我们可以做转换

s=df.groupby(['year_month','greenhouse','species']).produce.transform('sum')
df['New']=df.produce/s
df
    plant species greenhouse  produce year_month       New
0       1      S1        GH1      200    2020-05  0.500000
1       2      S1        GH1      200    2020-05  0.500000
2       3      S2        GH1      100    2020-05  0.666667
3       4      S2        GH1       50    2020-05  0.333333
4       5      S1        GH2       90    2020-05  1.000000
5       6      S2        GH2       60    2020-05  1.000000
6       7      S1        GH1      150    2020-04  1.000000
7       8      S1        GH2      250    2020-04  0.714286
8       9      S1        GH2      100    2020-04  0.285714
9      10      S2        GH2      150    2020-04  0.428571
10     11      S2        GH2      190    2020-04  0.542857
11     12      S2        GH2       10    2020-04  0.028571
 类似资料:
  • 问题内容: 我有一个带有Books的QuerySet,我想为每个Book结果添加一个字段。 在原始SQL中,我会写: 如何在Django中实现?我试过了,但似乎并不适合这种东西。 问题答案: 如遇票数可能的值是只有1和-1,你可以使用刚才提到他们总结注释:。 如果还有更多可能的值,则可以通过添加到上述查询中来过滤注释。 如果是更复杂的,你将不得不使用与。

  • 我的列表由变量类型(字符串),金额(双精度)和数量(整数)组成,它看起来像这样: 所以我试图循环我的数组来寻找重复的,如果是重复的,就加上数量。结果会是这样的: 我尝试过创建另一个列表,将列表添加到新列表中,然后比较它们,但没有成功 我不希望对值进行硬编码以检查重复类型

  • 问题内容: 我正在学习核心Java的心脏,即。我想知道,当我们在添加重复元素什么内部发生,,。 无论条目被替换,忽略还是引发异常,程序都将终止 。一个子问题是, 哪个 问题 的所有操作都具有相同或平均的时间复杂度 您的答复将不胜感激。 问题答案: Java中的TreeSet,LinkedHashSet和HashSet是集合框架中的三个Set实现,与许多其他对象一样,它们也用于存储对象。TreeSe

  • 在我的scala程序中,我有一个dataframe,其中有两列和(类型都为)。除此之外,我有一个先前定义的对象和一些方法和属性。在这里,我想要使用dataframe的当前值和中的属性向dataframe添加一个新列。 例如,如果我有下面的dataframe: 谢谢你。

  • 我使用文件路径解析 Spark 数据帧,但现在我想将路径与时间一起作为单独的列添加到生成的数据帧中。下面是一个当前的解决方案(pathToDF 是一个帮助器方法): 我正在尝试做这样的事情,但我不确定如何使用Column添加时间列: 实现它的更好方法是什么? 输入自由度: 当前结果: 预期结果: