Как я могу добавить столбец веса в зависимости от нескольких других столбцов? - PullRequest
1 голос
/ 21 июня 2020

У меня есть следующий pandas фрейм данных под названием «производство», и я хотел бы получить вес продукции каждого растения в зависимости от его вида, теплицы и года_месяца

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 + 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

Как я могу программно добавить столбец extension_weight?

Я пробовал использовать pandas для вычисления каждого веса вручную, но это очень утомительно, подвержено ошибкам и генерирует много дополнительных наборы данных. Это живые данные, поэтому в следующем месяце будет еще одна партия с year_month '2020-06', а также могут быть дополнительные GH и виды, поэтому я ищу решение, которое является достаточно общим и абстрактным, чтобы работать даже с дополнительными метками в каждом из столбцов. Может, какая-нибудь функция подействует?

1 Ответ

1 голос
/ 21 июня 2020

Мы можем transform

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
...