简化大熊猫

时间:2018-06-07 14:30:53

标签: python pandas

我需要计算每组的百分比(从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 :(得分:2)

我想这会有所帮助。
我正在使用7列的随机值创建一个df,将前6个除以第7列,然后使用辅助函数 calculate_hhi 计算 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)

答案 1 :(得分:0)

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)