根据多个行条件比较两个不同的数据帧

爱默生

我有两个包含有关同一患者的不同信息的数据框。我需要使用数据帧进行过滤数据框2使数据帧2将只保留其整数病人行的值,如果有一个整数值中df_1的相同chromosomestrandelementloc,和patient如果有一个NaN在df_1价值,我想提出NaNdf_2在同一位置。对于NaN已经存在的值df_2,我想将其保留为NaN。

因此,df_1df_2喜欢:

df_1 = pd.DataFrame({'chromosome': [1, 1, 5, 4],
                     'strand': ['-', '-', '+', '-'],
                     'elementloc': [4991, 8870, 2703, 9674],
                     'Patient1_Reads': ['NaN', 25, 50, 'NaN'],
                     'Patient2_Reads': [35, 200, 'NaN', 500]})

print(df_1)                                                                    
   chromosome strand  elementloc Patient1_Reads Patient2_Reads
0           1      -        4991            NaN             35
1           1      -        8870             25            200
2           5      +        2703             50            NaN
3           4      -        9674            NaN            500


df_2 = pd.DataFrame({'chromosome': [1, 1, 5, 4],
                     'strand': ['-', '-', '+', '-'],
                     'elementloc': [4991, 8870, 2703, 9674],
                     'Patient1_PSI': [0.76, 0.35, 0.04, 'NaN'],
                     'Patient2_PSI': [0.89, 0.15, 0.47, 0.32]})
print(df_2)                                                                      
   chromosome strand  elementloc   Patient1_PSI    Patient2_PSI
0           1      -        4991           0.76            0.89
1           1      -        8870           0.35            0.15
2           5      +        2703           0.04            0.47
3           4      -        9674            NaN            0.32

我希望新df_2的外观如下:

   chromosome strand  elementloc  Patient1_PSI  Patient2_PSI
0           1      -        4991           NaN          0.89
1           1      -        8870          0.35          0.15
2           5      +        2703          0.04           NaN
3           4      -        9674           NaN          0.32
    
Shubham Sharma

采用:

df3 = df1.merge(df2, on=['chromosome', 'strand', 'elementloc'])

r_cols = df3.columns[df3.columns.str.endswith('_Reads')]
p_cols = r_cols.str.strip('Reads') + 'PSI'

df3[p_cols] = df3[p_cols].mask(df3[r_cols].isna().to_numpy())
df3 = df3.drop(r_cols, 1)

细节:

步骤A:使用DataFrame.merge以创建一个合并数据帧df3通过合并dataframes获得df1df2['chromosome', 'strand', 'elementloc']

# print(df3)
   chromosome strand  elementloc  Patient1_Reads  Patient2_Reads  Patient1_PSI  Patient2_PSI
0           1      -        4991             NaN            35.0          0.76          0.89
1           1      -        8870            25.0           200.0          0.35          0.15
2           5      +        2703            50.0             NaN          0.04          0.47
3           4      -        9674             NaN           500.0           NaN          0.32

步骤B:使用.str.endswith来获得以df3该列为结尾的_Readsr_cols,然后我们将该列称为,然后使用该_Reads列来获取相应的_PSIp_cols

# print(r_cols)
Index(['Patient1_Reads', 'Patient2_Reads'], dtype='object')

# print(p_cols)
Index(['Patient1_PSI', 'Patient2_PSI'], dtype='object')

步骤C:DataFrame.isna_Reads列上使用以获得布尔掩码,然后将该掩码与一起使用DataFrame.mask以填充列中的相应NaN_PSI最后使用从合并的datframe中DataFrame.drop删除该_Readsdf3以获得所需的结果:

# print(df3)
   chromosome strand  elementloc  Patient1_PSI  Patient2_PSI
0           1      -        4991           NaN          0.89
1           1      -        8870          0.35          0.15
2           5      +        2703          0.04           NaN
3           4      -        9674           NaN          0.32

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据多个条件连接两个熊猫数据框

比较两个Spark数据帧

dplyr-根据条件从两个不同的数据帧中减去

比较两个数据帧,并根据匹配的列值从df中删除行

在多个条件下比较两个不同大小的数据框

基于两个不同列中的两个条件的子集数据帧R

比较两个熊猫数据帧的内容,即使行的顺序不同

根据条件比较两个对象

R:使用for循环在两个不同长度的数据帧上执行多个if条件

根据行索引将数据帧拆分为两个不相交的子帧

比较两个数据帧,如何根据条件和范围将ID从一个df添加到第二个

根据多个条件合并两个数据帧

如何根据日期时间列比较两个长度不等的数据帧

如何根据行值组合两个长度不同的熊猫数据帧

两个如何比较来自两个不同数据框的熊猫的两行

如何比较来自两个不同数据帧的两个句子的函数中的处理时间减少?

大熊猫:比较来自两个不同大小的不同数据帧的字符串列

使用R比较两个不同行的数据帧

比较两个熊猫数据帧的行的最快方法?

比较两个熊猫数据帧的行?

如何根据与两个不同列相关的两个条件打印所有行?

Python:根据两个条件比较数据帧

根据多个选择条件匹配的两个不同数据框中的行构建第三个数据框

如何比较pyspark中两个不同数据帧中的两列

如何连接来自两个不同数据帧的*具有给定条件*的行组合?

如何根据pandas python中的条件在两个不同的数据帧之间进行列操作

熊猫比较两个不同长度的数据帧并将某些行分成两半

基于多个条件匹配两个数据帧的行

从两个独立的数据库中根据多个条件选择行