需要使用>或<来比较数据框中的列

2024-10-01 04:56:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图比较一个数据帧中的两个值,Z_Score_Raw:

    ENST00000547849 ENST00000587894
0   -1.3099506  21.56600492

对于与另一个数据帧中的ENST头相对应的数字,增加了_Bio:

    ENST00000547849High_Avg ENST00000587894 High_Avg     
                                                       ENST00000547849 Low_Avg ENST00000587894 Low_Avg
    0.0026421609368421000   -0.0457525087368421     
                                                        -0.040015074588235300   -0.04140853107142860

因此,基本上我需要将包含-1.3099506的ENST0000547849与ENST0000547849的高平均值和低平均值以及ENST0000587894列进行比较。 如果高_平均值<;Z_Score_Raw然后我必须返回1,如果它是>;Z_原始分数我返回0

如何做到这一点?主要部分是将一个数字与两个分数进行比较,然后返回一个数字

以下是我目前的工作内容:

 for x in Z_score_raw:
     Z_Score_List.append(list(Z_score_raw[x]))

 for x in single_z_score:
     for i in range(Z_Score_List):
         print(single_z_score[x].item())
         if (single_z_score[x].item() < Z_Score_List[i]):
             df_new[x+'avg'] = 1
         elif(single_z_score[x].item() > Z_Score_List[i]):
             df_new[x+'avg'] = 0


Tags: 数据inforraw数字itemlistlow
1条回答
网友
1楼 · 发布于 2024-10-01 04:56:44

此代码将数据设置为单个tidy数据帧,然后以矢量化方式计算操作:

import numpy as np
import pandas as pd

Z_Score_Raw = pd.DataFrame({"ENST00000547849": [-1.3099506],
                            "ENST00000587894": [21.56600492]})

Increased_Bio = pd.DataFrame({"ENST00000547849 High_Avg": [0.0026421609368421000],
                              "ENST00000587894 High_Avg": [-0.0457525087368421],
                              "ENST00000547849 Low_Avg": [-0.040015074588235300],
                              "ENST00000587894 Low_Avg": [-0.04140853107142860]})

tidy_data = (
    # Tidying the data
    Increased_Bio.melt()
    .assign(id=lambda x: x['variable'].str.split(' ', expand=True)[0],
            variable=lambda x: x['variable'].str.split(' ', expand=True)[1])
    .pivot(index="id", columns="variable", values="value").reset_index()
    .merge(Z_Score_Raw.melt(var_name="id", value_name="raw_score"))
    # Calculating the values of interest
    .assign(
        out_of_range=lambda x: np.where((x["raw_score"] > x["low_avg"]) & (x["raw_score"] < x["high_avg"]), 0, 1)))

输出如下所示:

                id  High_Avg   Low_Avg  raw_score  out_of_range
0  ENST00000547849  0.002642 -0.040015  -1.309951             1
1  ENST00000587894 -0.045753 -0.041409  21.566005             1

相关问题 更多 >