Dataframe_1
如果此行中第四列的值存在于的整个第一列的任何行中,我想从熊猫中查找行Dataframe_2
。我需要将这些行复制到新表中。
编辑
在这里,我还包括数据框:
数据框_1:
1 2 3 4
0
chr1 128611 128681 cuffs_1_128645 .
chr1 186868 186933 cuffs_2_186901 .
chr1 186978 187035 cuffs_3_187015 .
chr1 187054 187122 cuffs_4_187082 .
chr1 262712 262773 cuffs_5_262742 .
数据框_2:
1 2 3 4 5 6 7 8
0
cuffs_100001_101338862 1.24 3.11 1.86 11.19 5.59 8.08 0.62 0
cuffs_100004_101354225 2.49 0.62 1.86 1.86 2.49 1.24 0.00 0
cuffs_100045_101386584 14.92 14.92 3.11 10.57 5.59 15.54 0.62 0
cuffs_100089_101719129 2.49 0.62 1.86 5.59 1.86 1.86 0.00 0
cuffs_100111_101726996 6.84 0.00 3.73 3.11 6.84 2.49 0.62 0
这两个数据帧都是从.csv导入的,并且非常庞大,因此在这里我只放置了几行和几列。
这是我尝试的:
import pandas as pd
df1 = pd.DataFrame.from_csv(Dataframe_1, sep = '\t', index_col=list(range(0,1,2)), header = None)
df2 = pd.DataFrame.from_csv(Dataframe_2, sep = '\t', index_col=list(range(0,1,2)), header = None)
df1 = df1[df1[3] == df2[0]]
df1.to_csv(fileout, sep = '\t', header = False)
当执行此操作时,我得到八(或大约)行响应,这些响应引用了pandas软件包文件,index.pyx
而hashtable.pyx
我不理解。
知道了!显然,没有经过测试的用于过滤的命令,无论是过滤df1 = df1[df1[3].isin(df2[0])]
还是df1 = df1[df1[3] == df2[0]]
识别出代表行索引的“ 0”列。出路是导入Dataframe_2而不是分配(0,1,2)而是(1,2,3)来分配列,这将导致df2的以下格式设置:
0 2 3 4 5 6 7 8
1
1.24 cuffs_100001_101338862 3.11 1.86 11.19 5.59 8.08 0.62 0
2.49 cuffs_100004_101354225 0.62 1.86 1.86 2.49 1.24 0.00 0
14.92 cuffs_100045_101386584 14.92 3.11 10.57 5.59 15.54 0.62 0
2.49 cuffs_100089_101719129 0.62 1.86 5.59 1.86 1.86 0.00 0
6.84 cuffs_100111_101726996 0.00 3.73 3.11 6.84 2.49 0.62 0
其中“ 0”列不再是行的索引。然后我们可以申请df1 = df1[df1[3].isin(df2[0])]
。注意:的应用程序df1 = df1[df1[3] == df2[0]]
将引发错误消息Series lengths must match to compare
谢谢!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句