numpy 嵌套for循环以在Python中创建平均值和SD的汇总表

yrwegjxp  于 2023-03-30  发布在  Python
关注(0)|答案(2)|浏览(122)

我有一个numpy数组的形状(2,2,1000)代表收入组,年龄组和1000个观察样本每组。
我尝试使用for循环来计算汇总表。
我希望收到以下类型的表格:

这是我的代码:

import numpy as np
import pandas as pd

elasticity = np.random.rand(2,2,1000)
print(elasticity.shape)

income = ['i0','i1']
age_gr= ['<=18','>18']

data=[]
df = pd.DataFrame()
for i in range(len(age_gr)):
    row=[]
    for j in range((len(income))):
        row.append(np.mean(elasticity[i,j,:]))
        row.append(np.std(elasticity[i,j,:]))
        data.append(row)
data

df = pd.DataFrame(data)  
df

但是我的for循环有问题,我总是得到4x4的平均值和标准差表,而不是我想要的2x4。我做错了什么?

fcg9iug3

fcg9iug31#

data.append(row)位于for j循环中,而不是for i循环中。
只要取消一次标签:

import numpy as np
import pandas as pd

elasticity = np.random.rand(2,2,1000)
print(elasticity.shape)

income = ['i0','i1']
age_gr= ['<=18','>18']

data=[]
df = pd.DataFrame()
for i in range(len(age_gr)):
    row=[]
    for j in range((len(income))):
        row.append(np.mean(elasticity[i,j,:]))
        row.append(np.std(elasticity[i,j,:]))
    data.append(row)  # **************************** <=
data

df = pd.DataFrame(data)  
df
balp4ylt

balp4ylt2#

您遇到的问题是row = []的位置。
你的行当前在循环中的样子是:

i = 0, j = 0:
[] -> [ value1 , value2 ]
i = 0, j = 1:
[ value1 , value2 ] -> [ value1 , value2, value3, value4 ]

i = 1, j = 0:
[] -> [ value1 , value2 ]
i = 1, j = 1:
[ value1 , value2 ] -> [ value1 , value2, value3, value4 ]

解决方案应该是简单地将row = []移动到第二个for-循环中。这样,您将在data上附加4次2项列表,而不是之前的解决方案。

相关问题