如何根据数值大小将两个96孔板对应读值(ELISA实验比色读值)筛选出来

这篇博客介绍了如何使用Python的pandas库,通过设置阈值筛选96孔板中两块板对应位置的读值,当两个孔的读值都大于1时,提取这些孔的位置和读值。具体操作包括使用条件筛选、where方法和mask方法来实现数据过滤,并展示了筛选后的结果。
#有个小姐姐问我如何根据数值大小将两个96孔板对应读值(ELISA实验比色读值)筛选出来
#或者说这个96孔板的某个孔读值大于1,另一个孔板的对应位置孔的读值也大于1,然后把这两个孔的位置和读值拎出来
import numpy as np
import pandas as pd
df1 = pd.DataFrame(np.random.randn(8,12))
df1
01234567891011
00.781495-0.956770-2.041881-2.131769-0.4347860.3157952.506154-0.4610580.046417-0.8761732.2739900.404110
10.6951660.557982-0.752808-1.0768771.2884351.5949941.071906-0.7431581.3965901.301780-1.0054440.290408
2-0.8769310.712162-0.1668320.267058-0.2076911.261624-0.4030820.132663-1.2217751.1526410.499253-1.754460
3-0.012622-0.597558-0.9421670.3633330.801809-0.1204960.609882-0.0658200.830766-0.412523-0.7707130.344326
41.231323-0.795497-0.9081720.6395520.227574-0.2709950.616138-1.4714392.0714191.847138-0.799393-0.426353
50.1863520.500882-1.0553670.164030-0.761327-0.3448091.474521-0.8114130.0438721.250452-0.727637-0.551056
60.4832010.8124390.359324-0.172657-0.597168-0.434302-0.4497320.496633-1.8537561.708570-0.3152661.454854
7-0.186381-0.3468962.2538131.1210860.3837410.063512-2.256346-1.4901540.777294-0.9110521.999403-2.083665
df2 = pd.DataFrame(np.random.randn(8,12))
df2
01234567891011
0-0.1448151.0433570.140666-1.512447-0.5505801.492557-0.0761500.695161-1.1215383.309408-0.715549-0.797320
1-1.0492920.473925-0.067462-0.176861-1.709414-0.5167710.524147-1.166597-0.541530-0.4355340.694487-0.710785
2-1.1568381.536175-1.189410-0.325310-0.8379050.1317701.4670330.1804680.212995-0.3557210.729965-0.620106
31.394005-1.813023-0.0388610.6986481.524630-0.4866050.420300-0.0709140.3314050.2519500.110747-0.678403
40.214991-1.6314562.0058901.634248-1.2782511.4454591.0261351.3426611.2078960.908430-0.246870-0.127285
50.6438262.0899490.0601660.5367690.162407-1.112289-1.6869020.002583-0.5767541.0076620.634476-0.038816
6-0.065258-0.483580-0.2414950.2958281.9931421.9021920.072042-0.7226990.6008620.0884760.2394782.057863
7-3.614046-0.7298900.583971-0.578744-0.370513-0.722133-1.8034091.615766-0.7068460.712729-2.173237-0.590307
#简单点来说,我们把阈值设为0,筛选则应该为 df1 > 0 & df2 > 0
df1[(df1 > 0) & (df2 > 0)]
01234567891011
0NaNNaNNaNNaNNaN0.315795NaNNaNNaNNaNNaNNaN
1NaN0.557982NaNNaNNaNNaN1.071906NaNNaNNaNNaNNaN
2NaN0.712162NaNNaNNaN1.261624NaN0.132663NaNNaN0.499253NaN
3NaNNaNNaN0.3633330.801809NaN0.609882NaN0.830766NaNNaNNaN
41.231323NaNNaN0.639552NaNNaN0.616138NaN2.0714191.847138NaNNaN
50.1863520.500882NaN0.164030NaNNaNNaNNaNNaN1.250452NaNNaN
6NaNNaNNaNNaNNaNNaNNaNNaNNaN1.708570NaN1.454854
7NaNNaN2.253813NaNNaNNaNNaNNaNNaNNaNNaNNaN
df2[(df1 > 0) & (df2 > 0)]
01234567891011
0NaNNaNNaNNaNNaN1.492557NaNNaNNaNNaNNaNNaN
1NaN0.473925NaNNaNNaNNaN0.524147NaNNaNNaNNaNNaN
2NaN1.536175NaNNaNNaN0.131770NaN0.180468NaNNaN0.729965NaN
3NaNNaNNaN0.6986481.52463NaN0.420300NaN0.331405NaNNaNNaN
40.214991NaNNaN1.634248NaNNaN1.026135NaN1.2078960.908430NaNNaN
50.6438262.089949NaN0.536769NaNNaNNaNNaNNaN1.007662NaNNaN
6NaNNaNNaNNaNNaNNaNNaNNaNNaN0.088476NaN2.057863
7NaNNaN0.583971NaNNaNNaNNaNNaNNaNNaNNaNNaN
#pandas的其他函数
df1.where((df1 > 0) & (df2 > 0))
01234567891011
0NaNNaNNaNNaNNaN0.315795NaNNaNNaNNaNNaNNaN
1NaN0.557982NaNNaNNaNNaN1.071906NaNNaNNaNNaNNaN
2NaN0.712162NaNNaNNaN1.261624NaN0.132663NaNNaN0.499253NaN
3NaNNaNNaN0.3633330.801809NaN0.609882NaN0.830766NaNNaNNaN
41.231323NaNNaN0.639552NaNNaN0.616138NaN2.0714191.847138NaNNaN
50.1863520.500882NaN0.164030NaNNaNNaNNaNNaN1.250452NaNNaN
6NaNNaNNaNNaNNaNNaNNaNNaNNaN1.708570NaN1.454854
7NaNNaN2.253813NaNNaNNaNNaNNaNNaNNaNNaNNaN
df2.where((df1 > 0) & (df2 > 0),other="$")
01234567891011
0$$$$$1.49256$$$$$$
1$0.473925$$$$0.524147$$$$$
2$1.53617$$$0.13177$0.180468$$0.729965$
3$$$0.6986481.52463$0.4203$0.331405$$$
40.214991$$1.63425$$1.02613$1.20790.90843$$
50.6438262.08995$0.536769$$$$$1.00766$$
6$$$$$$$$$0.0884757$2.05786
7$$0.583971$$$$$$$$$
#其他方法2,反向筛选
df1.mask((df1 > 0) & (df2 > 0)) #也可以指定other= ,让选中的位置变成指定的字符
01234567891011
00.781495NaNNaN-2.131769-0.4347860.3157952.506154NaN0.046417NaN2.2739900.404110
10.6951660.557982-0.752808-1.0768771.2884351.5949941.071906-0.7431581.3965901.301780NaN0.290408
2-0.8769310.712162-0.1668320.267058-0.2076911.261624NaN0.132663NaN1.1526410.499253-1.754460
3NaN-0.597558-0.9421670.3633330.801809-0.1204960.609882-0.0658200.830766NaNNaN0.344326
41.231323-0.795497NaN0.6395520.227574NaN0.616138NaN2.0714191.847138-0.799393-0.426353
50.1863520.500882NaN0.164030NaN-0.3448091.474521NaN0.0438721.250452NaN-0.551056
60.4832010.8124390.359324NaNNaNNaNNaN0.496633NaN1.708570NaN1.454854
7-0.186381-0.3468962.2538131.1210860.3837410.063512-2.256346NaN0.777294NaN1.999403-2.083665
df1 = df1.where((df1 > 0) & (df2 > 0))
if (df1.items != "NaN"):
    print(df1.items)
<bound method DataFrame.items of           0         1         2         3         4         5         6  \
0       NaN       NaN       NaN       NaN       NaN  0.315795       NaN   
1       NaN  0.557982       NaN       NaN       NaN       NaN  1.071906   
2       NaN  0.712162       NaN       NaN       NaN  1.261624       NaN   
3       NaN       NaN       NaN  0.363333  0.801809       NaN  0.609882   
4  1.231323       NaN       NaN  0.639552       NaN       NaN  0.616138   
5  0.186352  0.500882       NaN  0.164030       NaN       NaN       NaN   
6       NaN       NaN       NaN       NaN       NaN       NaN       NaN   
7       NaN       NaN  2.253813       NaN       NaN       NaN       NaN   

          7         8         9        10        11  
0       NaN       NaN       NaN       NaN       NaN  
1       NaN       NaN       NaN       NaN       NaN  
2  0.132663       NaN       NaN  0.499253       NaN  
3       NaN  0.830766       NaN       NaN       NaN  
4       NaN  2.071419  1.847138       NaN       NaN  
5       NaN       NaN  1.250452       NaN       NaN  
6       NaN       NaN  1.708570       NaN  1.454854  
7       NaN       NaN       NaN       NaN       NaN  >

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值