numpy PANDA计算有列表的列的平均值,而不是单个值

vq8itlhq  于 2022-11-10  发布在  其他
关注(0)|答案(4)|浏览(171)

我有一个Pandas数据框,它有一列,每一行都有一个值列表。我需要使用每一行的相应值来计算平均值。也就是说,我需要列表中八个值的平均值。列表中的每个元素都是变量的值

>>> df_ex
0    [1, 2, 3, 4, 5, 6, 7, 8]
1    [2, 3, 4, 5, 6, 7, 8, 1]

我尝试将其转换为NumPy数组,然后采取相应的方法,但一直收到错误TypeError: unsupported operand type(s) for /: 'list' and 'int'。我明白,我应该将其转换为列,而不是使用列表,但在我的上下文中,这是不可能的。你知道我怎么才能做到这一点吗?

5lhxktic

5lhxktic1#

您可以先转换为嵌套列表,然后转换为array,然后计算mean

a = np.array(df_ex.tolist())
print (a)
[[1 2 3 4 5 6 7 8]
 [2 3 4 5 6 7 8 1]]

# Mean of all values

print (a.mean())
4.5

# Specify row-wise mean

print (a.mean(axis=1))
[ 4.5  4.5]

# Specify column-wise mean

print (a.mean(axis=0))
[ 1.5  2.5  3.5  4.5  5.5  6.5  7.5  4.5]
4si2a6ki

4si2a6ki2#

您可以通过传递嵌套列表并指定轴来调用np.mean

设置

df_ex = pd.DataFrame(dict(
    col1=[[1, 2, 3, 4, 5, 6, 7, 8],
          [2, 3, 4, 5, 6, 7, 8, 1]]))

df_ex

                       col1
0  [1, 2, 3, 4, 5, 6, 7, 8]
1  [2, 3, 4, 5, 6, 7, 8, 1]

解决方案

np.mean(df_ex['col1'].tolist(), axis=1)

array([ 4.5,  4.5])

np.mean(df_ex['col1'].tolist(), axis=0)

array([ 1.5,  2.5,  3.5,  4.5,  5.5,  6.5,  7.5,  4.5])
5t7ly7z5

5t7ly7z53#

最简单的方法:

col.apply(np.mean)
kq0g1dla

kq0g1dla4#

from ast import literal_eval  
import pandas as pd  
df=pd.read_csv("yourfile.csv", converters={"listcol": pd.eval})
def getMean(t:list[int]):  
    return sum(t)/len(t)
df["mean of listcol"]=df.apply(lambda row: getMean(row["listcol"]), axis=1)

要获取列的平均值,其中每行都是一个列表,取np.sum(df[“列表的平均值”])/len(Df)

相关问题