【问题标题】: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 放入单值单元格中。

标签: python dataframe nan mean


【解决方案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

【讨论】:

    猜你喜欢
    • 2013-02-28
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 2013-12-15
    相关资源
    最近更新 更多