我有一个示例数据框,如下所示:
df :
ST LW UD vl
E1 e1 pp@yr 2
F3 l1 pp@yr 4
F3 l2 pp@yr 7
E1 e3 pp2@yr 3
F3 l4 pp3@yr 13
E1 e5 pp3@yr 7
F3 l6 pp3@yr 9
E1 e7 pp2@yr 5
E1 e8 pp3@yr 3
F3 f9 pp4@yr 2
F3 f11 pp4@yr 5
F3 f13 pp5@yr 7
F3 f7 pp5@yr 9
我想做的任务是基于列ST获取平均值和std(如果它只包含E1),并执行以下操作:
dfD = df[df['ST'] == 'E1']
stats_df = dfD.groupby('UD')['vl'].describe()[['mean', 'std']]
mys = pd.DataFrame(stats_df).reset_index()
数据帧mys如下所示:
mys
UD mean std
pp2@yr 4.0 1.414214
pp3@yr 5.0 2.828427
pp@yr 2.0 NaN
然后,我将数据与原始数据帧合并,如下所示:
mdf = pd.merge(df, mys, how='left', on='UD')
生成的数据帧如下所示:
mdf
ST LW UD vl mean std
E1 e1 pp@yr 2 2.0 NaN
F3 l1 pp@yr 4 2.0 NaN
F3 l2 pp@yr 7 2.0 NaN
E1 e3 pp2@yr 3 4.0 1.414214
F3 l4 pp3@yr 13 5.0 2.828427
E1 e5 pp3@yr 7 5.0 2.828427
F3 l6 pp3@yr 9 5.0 2.828427
E1 e7 pp2@yr 5 4.0 1.414214
E1 e8 pp3@yr 3 5.0 2.828427
F3 f9 pp4@yr 2 NaN NaN
F3 f11 pp4@yr 5 NaN NaN
F3 f13 pp5@yr 7 NaN NaN
F3 f7 pp5@yr 9 NaN NaN
抱歉耽误了这么长时间。但现在我来谈谈实际的问题陈述:
问题是最后四行。问题是,每当mean和std都为Null时,我希望仅基于同时具有Null(仅基于ST=F3)和grouby(基于UD列)的行来计算mean和std。因此输出应该是这样的(注意:我计算了最后4行的平均值和统计数据)
finaldf
ST LW UD vl mean std
E1 e1 pp@yr 2 2.0 NaN
F3 l1 pp@yr 4 2.0 NaN
F3 l2 pp@yr 7 2.0 NaN
E1 e3 pp2@yr 3 4.0 1.414214
F3 l4 pp3@yr 13 5.0 2.828427
E1 e5 pp3@yr 7 5.0 2.828427
F3 l6 pp3@yr 9 5.0 2.828427
E1 e7 pp2@yr 5 4.0 1.414214
E1 e8 pp3@yr 3 5.0 2.828427
F3 f9 pp4@yr 2 3.5 1.5
F3 f11 pp4@yr 5 3.5 1.5
F3 f13 pp5@yr 7 8.0 1.0
F3 f7 pp5@yr 9 8.0 1.0
我可以尝试在“mdf”数据框中循环,找出mean和std列是否都有空值,然后仅基于这些行进行分组,但计算效率不高,我正在寻找一种有效的pythonic解决方案。任何帮助都将不胜感激
如果你想过滤掉数据框中有空值的行,然后计算这些行的平均值和标准值,你可以创建一个掩码,用这个掩码过滤df,然后计算你希望在以后插入到数据框中的值
它看起来像这样:
注意:只需键入&;即可继续为掩码添加限制;(and)|(or),后跟括号中的条件,例如:&;(mdf['ST']='F3')
相关问题 更多 >
编程相关推荐