从由数组组成的数据框中取列的平均值
Posted
技术标签:
【中文标题】从由数组组成的数据框中取列的平均值【英文标题】:Take mean of column from dataframe that consist of arrays 【发布时间】:2021-08-27 12:28:57 【问题描述】:我正在尝试对由数组[x,y,z]
组成的数据框中的每一列求平均值。此外,数组可以填充 NaN 值[np.nan, np.nan, np.nan].
我试过这个:
np.mean([df[col].mean() for col in df.columns], axis=0)
但这不起作用:/ 任何建议将不胜感激
【问题讨论】:
最好将数组explode
放入单值单元格中。
【参考方案1】:
你是这个意思吗?
df=pd.DataFrame('score1':[2010,np.nan,2010,2011,2011,2011],
'score2':[1,2,np.nan,1,2,3],
'score3':[np.nan,np.nan,32,14,15,16])
print([df[col].mean() for col in df.columns])
输出
[2010.6, 1.8, 19.25]
【讨论】:
是的,这就是我想要完成的。但不是前。 'year'[2010,np.nan,2010,2011,2011,2011] 我有 'year'[array[nan,nan,nan],array[12,10,8],array[nan,nan,nan]等] 如果你能在问题中展示你的例子会更清楚吗?【参考方案2】:假设您的数据框如下所示:
import pandas as pd
import numpy as np
data = "foobar":["foo", "bar", "baz"],
"year":[[np.nan,np.nan,np.nan],
[12,10,8],
[np.nan,np.nan,np.nan]]
df = pd.DataFrame(data)
foobar year
0 foo [nan, nan, nan]
1 bar [12, 10, 8]
2 baz [nan, nan, nan]
...您可以使用apply
构建一个包含平均值的新列:
df["means"] = df.year.apply(np.mean)
result_list = df.means.values # array([nan, 10., nan])
foobar year means
0 foo [nan, nan, nan] NaN
1 bar [12, 10, 8] 10.0
2 baz [nan, nan, nan] NaN
但是,根据您还想对数据做什么,最好将explode
序列放入单个单元格中以获得更多pandaesque结构:
df = df.explode(column="year")
df["year"] = df.year.astype(float) # tell Pandas it's numerical data
foobar year
0 foo NaN
0 foo NaN
0 foo NaN
1 bar 12.0
...
现在只需使用默认操作来获取按foobar
或您的列名分组的值。
mean_df = df.groupby("foobar").mean()
year
foobar
bar 10.0
baz NaN
foo NaN
【讨论】:
以上是关于从由数组组成的数据框中取列的平均值的主要内容,如果未能解决你的问题,请参考以下文章