Условная сумма значений путем добавления нового столбца - PullRequest
0 голосов
/ 16 марта 2020

Через некоторый код я уже пришел к этому сокращению оригинальной базы данных. Столбец STA_SID может иметь разные значения, некоторые могут повторяться. Столбец CC_SI может иметь только три значения - ESS, VSS или Ostali nameni.

Последнее, что я хотел бы сделать: добавить новый столбец, где для каждого уникального значения в STA_SID, sum столбец Au по значениям в CC_SI для каждого из трех возможных значений и для одного, где значение представляет собой более 50% от всего Au для STA_SID, присвойте этому CC_SI.

     STA_SID          CC_SI     Au
0   10001082  Ostali nameni  226.9
1   10001082            VSS  164.9
2   10001087  Ostali nameni   13.5
3   10001089  Ostali nameni   48.6
4   10001092  Ostali nameni   49.5
5   10001093            ESS  151.9
6   10001094  Ostali nameni    8.0
7   10001098  Ostali nameni   18.0
8   10001112  Ostali nameni   61.0
9   10001113  Ostali nameni   49.5
10  10001115            ESS   89.1
11  10001116            ESS   78.0
12  10001117            ESS  103.0
13  10001118            ESS   70.0
14  10001121            ESS  102.2

Пример:

CC_SI = 10001082

Сумма Au = 226,9 + 164,9 = 391,8

Au из Ostali nameni для STA_SID = 10001082 равно 226,9, что составляет более 50% от 391,8.

Окончательный df будет выглядеть так для STA_SID = 10001082

     STA_SID          CC_SI     Au            NewColumn
0   10001082  Ostali nameni  226.9       Ostali nameni
1   10001082            VSS  164.9       Ostali nameni


Я попытался написать это быстро одной строкой с lambda, но я не смог суммировать значения из других строк. Может кто-нибудь помочь, пожалуйста?

1 Ответ

1 голос
/ 16 марта 2020

Вы сможете найти его таким образом, получив пропорции Au для каждой записи по сравнению с ее группой, определив, какая запись будет определять CC_SI для ее группы, а затем применив это значение обратно к каждой группе.

df['Au_Proportion'] = df['Au']/df['Au'].groupby(df["STA_SID"]).transform('sum')
df['Majority'] = df['Au_Proportion'].apply(lambda x: 1 if x >.5 else 0)
df['Group_CC_SI'] = df.apply(lambda x: df['CC_SI'].loc[(df['Majority']==1)&(df['STA_SID']==x['STA_SID'])].values[0],axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...