程序问答   发布时间:2022-05-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了创建一个列,它是 Pandas 中数据框中多列的平均值大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决创建一个列,它是 Pandas 中数据框中多列的平均值?

开发过程中遇到创建一个列,它是 Pandas 中数据框中多列的平均值的问题如何解决?下面主要结合日常开发的经验,给出你关于创建一个列,它是 Pandas 中数据框中多列的平均值的解决方法建议,希望对你解决创建一个列,它是 Pandas 中数据框中多列的平均值有所启发或帮助; @H_675_2@所以我研究了多种可能的解决方案,但似乎都没有效果。

@H_675_2@基本上,我想在我的数据框中创建一个新列,它是多个其他列的平均值。我希望这个均值排除 NaN 值,但即使行中有 NaN 值,仍然计算均值。

@H_675_2@我有一个@R_673_7957@的数据框(但实际上是 Q222-229):

ID   Q1   Q2   Q3   Q4   Q5
1    4    NaN  NaN  NaN  NaN
2    5    7    8    NaN  NaN
3    7    1    2    NaN  NaN
4    2    2    3    4    1
5    1    3    NaN  NaN  NaN
@H_675_2@我想创建一个列,它是 Q1、Q2、Q3、Q4、Q5 的平均值,即:

ID   Q1   Q2   Q3   Q4   Q5   avg_age
1    4    NaN  NaN  NaN  NaN  4
2    5    7    8    NaN  NaN  5.5
3    7    1    2    NaN  NaN  3.5
4    2    2    3    4    1    2
5    1    3    NaN  NaN  NaN  2
@H_675_2@(忽略值)

@H_675_2@但是,我尝试过的每种方法都会在 avg_age 列中返回 NaN 值,这让我认为在忽略 NaN 值时,pandas 会忽略整行。但我不希望这种情况发生,而是希望在忽略 NaN 值的情况下返回均值。

@H_675_2@这是我迄今为止尝试过的:

1.
    avg_age = s.loc[:,"Q222":"Q229"]
    avg_age = avg_age.mean(axis=1)
    s = pd.concat([s,avg_age],axis=1)

2.
    s['avg_age'] = s[['Q222','Q223','Q224','Q225','Q226','Q227','Q228','Q229']].mean(axis=1)

3.

    avg_age = ['Q222','Q229']
    s.loc[:,'avg_age'] = s[avg_age].mean(axis=1)
@H_675_2@我不确定我最初对值进行编码的方式是否有问题,所以这是我的代码供参

@H_675_2@#Changing age 变量输入

s['Q222'] = s['Q222'].replace(['18-24','25-34','35-44','45-54','55-64','65-74','75 or older',"Don't kNow"],['2','3','4','5','6','7','8',np.NaN])
s['Q223'] = s['Q223'].replace(['18-24',np.NaN])
s['Q224'] = s['Q224'].replace(['18-24',np.NaN])
s['Q225'] = s['Q225'].replace(['18-24',np.NaN])
s['Q226'] = s['Q226'].replace(['18-24',np.NaN])
s['Q227'] = s['Q227'].replace(['18-24',np.NaN])
s['Q228'] = s['Q228'].replace(['18-24',np.NaN])
s['Q229'] = s['Q229'].replace(['18-24',np.NaN])

s['Q222'] = s['Q222'].replace(['0-4','05-11','12-15','16-17'],'1')
s['Q223'] = s['Q223'].replace(['0-4','1')
s['Q224'] = s['Q224'].replace(['0-4','1')
s['Q225'] = s['Q225'].replace(['0-4','1')
s['Q226'] = s['Q226'].replace(['0-4','1')
s['Q227'] = s['Q227'].replace(['0-4','1')
s['Q228'] = s['Q228'].replace(['0-4','1')
s['Q229'] = s['Q229'].replace(['0-4','1')
@H_675_2@提前感谢任何能够提供帮助的人!

解决方法

@H_675_2@skipna=True

@H_675_2@可以使用 list comprehension 获取列的平均值,并使用 @H_113_9@mean() 获取:

df['ave_age'] = df[[col for col in df.columns if 'Q' in col]].mean(axis = 1,skipna = TruE)
, @H_675_2@DataFrame.mean() 的默认行为应该按照您的意愿行事。

@H_675_2@以下示例显示对列的子集取平均值并将其放入新创建的列中:

In[19]: tmp
Out[19]: 
   a  b    c
0  1  2  5.0
1  2  3  6.0
2  3  4  NaN

In[24]: tmp['mean'] = tmp[['b','c']].mean(axis=1)

In[25]: tmp
Out[25]: 
   a  b    c  mean
0  1  2  5.0   3.5
1  2  3  6.0   4.5
2  3  4  NaN   4.0
@H_675_2@至于你的代码出了什么问题:

s['Q222'] = s['Q222'].replace(['18-24','25-34','35-44','45-54','55-64','65-74','75 or older',"Don't know"],['2','3','4','5','6','7','8',np.NaN])
@H_675_2@您的数据框中没有数值(即 2、3、4),您有字符串('2'、'3' 和 '4')。 DataFrame.mean() 函数将这些字符串视为 NaN,因此您将获得 NaN 作为所有均值计算的结果。

@H_675_2@尝试用数字填充您的框架,如下所示:

 s['Q222'] = s['Q222'].replace(['18-24',[2,3,4,5,6,7,8,np.NaN])

大佬总结

以上是大佬教程为你收集整理的创建一个列,它是 Pandas 中数据框中多列的平均值全部内容,希望文章能够帮你解决创建一个列,它是 Pandas 中数据框中多列的平均值所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:它是