查找行和列组熊猫的平均值

Eva*_*Kim 0 python pandas

我想找到平均总收入最高的州,并能够看到1992-2016年所有州的平均总收入最高的州(第40-45位),第35-40位(最高)的州。

数据组织在下图中的数据框中。因此,理想情况下,我可以有另一列如下所示。我想这就是我要做的。

STATE // YEAR // TOTAL_REVENUE // AVG_TOTAL_REVENUE

ALABAMA // 1992 // 5000 // 6059

ALABAMA // 1993 // 4000 // 6059

ALASKA // 1992 // 3000 // 2059

ALABAMA // 1996 // 6019 // 6059
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

这可能吗?我不确定我是否要说出我想正确做的事情,也不确定我在寻找谷歌明智的方法以找出前进的方向。

Ann*_*son 6

假设您的输入如下所示:

STATE       YEAR    TOTAL_REVENUE
Michigan    2001    1000
Michigan    2002    2000
California  2003    3000
California  2004    4000
Michigan    2005    5000
Run Code Online (Sandbox Code Playgroud)

然后做:

df['AVG_TOTAL_REVENUE'] = np.nan

states = df['STATE'].tolist()
states = list(set(states))

for state in states:
    state_values = df[df['STATE'] == state]
    revenues = state_values['TOTAL_REVENUE'].tolist()
    revenues = [float(x) for x in revenues]
    avg = sum(revenues)/len(revenues)
    df['AVG_TOTAL_REVENUE'].loc[state_values.index] = avg
Run Code Online (Sandbox Code Playgroud)

这给你:

     STATE     YEAR       TOTAL_REVENUE  AVG_TOTAL_REVENUE
0    Michigan  2001           1000        2666.666667
1    Michigan  2002           2000        2666.666667
2  California  2003           3000        3500.000000
3  California  2004           4000        3500.000000
4    Michigan  2005           5000        2666.666667
Run Code Online (Sandbox Code Playgroud)

  • 这是不好的做法。您不想对熊猫使用循环。您可以简单地使用以下代码替换整个代码:`df ['AVG_TOTAL_REVENUE'] = df.groupby('STATE')['TOTAL_REVENUE']。transform('mean')` (2认同)