упростить вычисление суммирования (знак сигмы) в пандах - PullRequest
0 голосов
/ 07 июня 2018

Мне нужно посчитать процент каждой группы (от A до G) и использовать шесть разных столбцов, чтобы разделить на один и тот же (например, G представляет общее количество).И тогда мне нужно посчитать вычислить что-то под названием HHI .Мое уравнение имеет "1-" перед знаком сигмы.Таким образом, мне нужно возвести в квадрат эти столбцы, а затем сложить их, а затем использовать 1 минус сложение.Мне нужно сохранить эти столбцы процентов в моем фрейме данных.Пожалуйста, помогите мне упростить следующий код:

  df = pd.DataFrame(np.random.randn(20, 7), columns=list("ABCDEFG"))

  #percentage
        df["pct_A"] = df_race.A / df_race.G
        df["pct_B"] = df_race.B / df_race.G
        df["pct_C"] = df_race.C / df_race.G
        df["pct_D"] = df_race.D / df_race.G
        df["pct_E"] = df_race.E / df_race.G
        df["pct_F"] = df_race.F / df_race.G

    #HHI Index
        df["hhi"] = 1-(df.pct_A**2 + df.pct_B**2 + df.pct_C**2 + 
                       df.pct_D**2 + df.pct_E**2 + df.pct_F**2)

Ответы [ 2 ]

0 голосов
/ 11 июня 2018
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(20, 7), columns=list("ABCDEFG"))

Что я когда-либо использовал (набор данных содержит пропущенные значения):

df.iloc[:, 0:6] = df.iloc[:, 0:6].apply(lambda x: x/df.G)
df["hhi"] = 1 - df.iloc[:, 0:6].apply(lambda x: x**2).sum(skipna=False, axis=1)
0 голосов
/ 07 июня 2018

Полагаю, это поможет.
Я создаю df со случайными значениями с 7 столбцами, делю первые 6 с 7-м столбцом, а затем вычисляю hhi , используя вспомогательную функцию Calculate_hhi .

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(20, 7), columns=list('ABCDEFG'))

def calculate_hhi(row):
    hhi = 1 - (row['A']**2 + row['B']**2 + row['C']**2 + row['D']**2 + row['E']**2 + row['F']**2 )
    return hhi 

df.iloc[:, 0:6] = df.iloc[:, 0:6].apply(lambda x: x/df.G, axis=0)
df['hhi'] = df.apply(calculate_hhi, axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...