Pandas 删除函数:不可对齐的布尔级数

Pandas 删除函数:不可对齐的布尔级数,pandas,Pandas,我有两个数据帧。第一个df0: Name CHR MAPINFO PMG APA cg13869341 1 15865 0.8954256 0.8409144 cg14008030 1 18827 0.5941512 0.712414 cg12045430 1 29407 0.1110794 0.1302404 cg20826792 1 29425 0.177532 0.1304049 cg0038

我有两个数据帧。第一个df0:

Name       CHR  MAPINFO     PMG         APA 
cg13869341  1   15865   0.8954256   0.8409144
cg14008030  1   18827   0.5941512   0.712414
cg12045430  1   29407   0.1110794   0.1302404
cg20826792  1   29425   0.177532    0.1304049
cg00381604  1   29435   0.09003246  0.04180672
cg20253340  1   68849   0.4738799   0.444899
结束第二个df1:

probe   Chromosome  Gstart  Gend
A_23_P11744     1   4363    39806
A_33_P3365932   1   4363    39806
A_32_P923011    1   24554   46081
我想迭代df0[“MAPINFO”],删除不符合条件的行,并将方法附加到另一个df。我的代码如下:

for pos in df0['MAPINFO']:
    cond = (( pos < df1['Gstart']) & ( pos > df1['Gend']))
    print df0.drop(df0[cond].index.values).mean(axis=0, skipna=True, level=None)

删除df0“cg20253340 1 68849 0.4738799 0.444899”中的最后一行,并采用行平均法。

我的解决方案是制作实现包含标准的布尔索引,然后使用它:

import pandas as pd

df0 = pd.DataFrame.from_records([["cg13869341", 1, 15865, 0.8954256, 0.8409144],
                                 ["cg14008030", 1, 18827, 0.5941512, 0.712414],
                                 ["cg12045430", 1, 29407, 0.1110794, 0.1302404],
                                 ["cg20826792", 1, 29425, 0.177532, 0.1304049],
                                 ["cg00381604", 1, 29435, 0.09003246, 0.04180672],
                                 ["cg20253340", 1, 68849, 0.4738799, 0.444899]],
                                columns = ["Name", "CHR", "MAPINFO", "PMG", "APA"])

df1 = pd.DataFrame.from_records([["A_23_P11744", 1, 4363, 39806],
                                 ["A_33_P3365932", 1, 4363, 39806],
                                 ["A_32_P923011", 1, 24554, 46081]],
                                columns = ["probe", "Chromosome", "Gstart", "Gend"])

F = df0.MAPINFO.apply(lambda x: ((df1.Gstart <= x) & (x <= df1.Gend)).any())
print df0[F] ## as you exepected

# mean by rows
res = df0[F]
res['mean'] = df0[F][['PMG', 'APA']].mean(1)
print res

# mean by columns
print df0[F][['PMG', 'APA']].mean(0)
将熊猫作为pd导入
df0=pd.DataFrame.from_记录([[cg13869341,115865,0.8954256,0.8409144],
[“CG1400830”,118827,0.5941512,0.712414],
[“cg12045430”,129407,0.1110794,0.1302404],
[“cg20826792”,129425,0.177532,0.1304049],
[“cg00381604”,129435,0.09003246,0.04180672],
[“cg20253340”,168849,0.4738799,0.444899],
列=[“名称”、“CHR”、“MAPINFO”、“PMG”、“APA”])
df1=pd.DataFrame.from_记录([[A_23_P11744],1436339806],
[“A_33_P3365932”,1436339806],
[“A_32_P923011”,1245446081],
列=[“探针”、“染色体”、“Gstart”、“Gend”])

F=df0.MAPINFO.apply(λx:((df1.Gstart您希望得到的答案是什么?我认为这段代码以前不起作用。您正试图用df1中的标记为df0编制索引,这可能会起作用,但确实很奇怪,因为布尔索引的长度不等于要编制索引的数组的长度,所以可能是换行的。您肯定会得到意外的结果。@AndyHayden:感谢您的评论。请参阅编辑以获得预期结果。很抱歉,您的评论过于繁琐,但作为数据帧的预期结果是什么?:)@AndyHayden:查看编辑。感谢您的帮助。您的建议对这些dfs非常有效。我正在尝试修改您的代码,以便一次为每个MAPINFO应用lambda函数。事实上,这些df非常大。最好。为避免误解:MAPINFO迭代已经是df.MAPINFO.apply的一部分,而不是for循环的替代。在此响应中我必须根据我的需要调整你的建议。谢谢你的帮助。
Name       CHR  MAPINFO     PMG         APA 
cg13869341  1   15865   0.8954256   0.8409144
cg14008030  1   18827   0.5941512   0.712414
cg12045430  1   29407   0.1110794   0.1302404
cg20826792  1   29425   0.177532    0.1304049
cg00381604  1   29435   0.09003246  0.04180672
import pandas as pd

df0 = pd.DataFrame.from_records([["cg13869341", 1, 15865, 0.8954256, 0.8409144],
                                 ["cg14008030", 1, 18827, 0.5941512, 0.712414],
                                 ["cg12045430", 1, 29407, 0.1110794, 0.1302404],
                                 ["cg20826792", 1, 29425, 0.177532, 0.1304049],
                                 ["cg00381604", 1, 29435, 0.09003246, 0.04180672],
                                 ["cg20253340", 1, 68849, 0.4738799, 0.444899]],
                                columns = ["Name", "CHR", "MAPINFO", "PMG", "APA"])

df1 = pd.DataFrame.from_records([["A_23_P11744", 1, 4363, 39806],
                                 ["A_33_P3365932", 1, 4363, 39806],
                                 ["A_32_P923011", 1, 24554, 46081]],
                                columns = ["probe", "Chromosome", "Gstart", "Gend"])

F = df0.MAPINFO.apply(lambda x: ((df1.Gstart <= x) & (x <= df1.Gend)).any())
print df0[F] ## as you exepected

# mean by rows
res = df0[F]
res['mean'] = df0[F][['PMG', 'APA']].mean(1)
print res

# mean by columns
print df0[F][['PMG', 'APA']].mean(0)