Pandas如何计算除选定标签外的所有标签值的标准差?

sgtfey8w  于 2022-11-20  发布在  其他
关注(0)|答案(1)|浏览(93)

我有一个DF,标签和值如下:

df = pd.DataFrame({'labels' : ['A','A', 'B', 'C', 'C'],'val' : [1, 2, 3, 4, 5]})

现在,我想计算标准差,如下所示:
对于每一行:
带有A的行:(B和C标签的标准偏差)(前2行将具有所有其他行的标准偏差)
带有B的行:(A和C标签的标准偏差)(第三行将具有所有其他行的标准偏差)
带有C的行:(A和B标签的标准偏差)(最后2行将具有所有其他行的标准偏差)
我如何才能做到这一点?

6qftjkof

6qftjkof1#

更新要优化,请预先计算每个标签的标准偏差:

df = pd.DataFrame({'labels' : ['A','A', 'B', 'C', 'C'],'val' : [1, 2, 3, 4, 5]})

labels = df.labels.unique()

std_map = {l:df[df.labels != l]["val"].std() for l in labels}

df["std_dev"] = df["labels"].apply(lambda l: std_map[l])

迭代 Dataframe 并筛选具有其他标签的行,然后计算标准偏差:

df = pd.DataFrame({'labels' : ['A','A', 'B', 'C', 'C'],'val' : [1, 2, 3, 4, 5]})

df["std_dev"] = df.apply(lambda row: df[df.labels != row["labels"]]["val"].std(), axis=1)

[Out]:
  labels  val   std_dev
0      A    1  1.000000
1      A    2  1.000000
2      B    3  1.825742
3      C    4  1.000000
4      C    5  1.000000

相关问题