[英]How to select rows from pandas DataFrame array columns with certain value
[英]How to select rows with certain value between 2 columns from another DataFrame in pandas?
例如,我有 2 个框架,第一个是我想要 select 行的那个,第二个包含用于选择的条件。
df1 = pd.DataFrame({'chr': {0: 7, 1: 7, 2: 7, 3: 7, 4: 7, 5: 7, 6: 7},
0: {0: 55241686,
1: 55242415,
2: 55248986,
3: 55259412,
4: 55260459,
5: 55266410,
6: 55268009},
1: {0: 55241736,
1: 55242513,
2: 55249171,
3: 55259567,
4: 55260534,
5: 55266556,
6: 55268064}})
df2 = pd.DataFrame({'chr': {0: 7,
1: 7,
2: 7,
3: 7,
4: 7,
5: 7,
6: 7,
7: 7,
8: 7,
9: 7,
10: 7,
11: 7,
12: 7,
13: 7,
14: 7,
15: 7,
16: 7,
17: 7,
18: 7,
19: 7},
's': {0: 55241646,
1: 55241658,
2: 55241690,
3: 55241718,
4: 55241721,
5: 55241722,
6: 55241727,
7: 55241732,
8: 55242454,
9: 55242457,
10: 55242488,
11: 55242511,
12: 55248991,
13: 55248995,
14: 55248995,
15: 55249000,
16: 55249022,
17: 55249036,
18: 55249053,
19: 55249057},
'e': {0: 55241646,
1: 55241658,
2: 55241690,
3: 55241718,
4: 55241721,
5: 55241722,
6: 55241727,
7: 55241732,
8: 55242454,
9: 55242457,
10: 55242488,
11: 55242511,
12: 55248991,
13: 55248995,
14: 55248995,
15: 55249000,
16: 55249022,
17: 55249036,
18: 55249053,
19: 55249057},
'ref': {0: 'T',
1: 'T',
2: 'A',
3: 'G',
4: 'C',
5: 'G',
6: 'G',
7: 'A',
8: 'G',
9: 'G',
10: 'C',
11: 'G',
12: 'C',
13: 'G',
14: 'G',
15: 'G',
16: 'G',
17: 'G',
18: 'C',
19: 'C'},
'alt': {0: 'C',
1: 'G',
2: 'C',
3: 'A',
4: 'T',
5: 'A',
6: 'A',
7: 'G',
8: 'A',
9: 'A',
10: 'T',
11: 'A',
12: 'G',
13: 'A',
14: 'C',
15: 'A',
16: 'C',
17: 'A',
18: 'G',
19: 'T'}})
df2 这里只展示了一小部分。
我想要实现的是
对于 df1 中的每一行,如果此行 (row_df1) 与 df2 (row_df2) 中的某些行匹配(匹配意味着 row_df1['chr']==row_df2['chr'] & row_df1[0] >= row_df2['s '] & row_df1 1 <= row_df2['e']
简单来说,
如果该值落入由 df2['s'] 和 df2['e'] 构造的特定区间,则返回它。
我相信对您来说最好的情况是首先使用一个公共列合并两个数据框。 在你的情况下“chr”。 例如,据我了解,您想要 df1 中存在 df2 的所有“chr”,所以在这种情况下,您只需执行以下操作:
merged_df = df1.merge(df2, on='chr', how='left')
在合并中,您可以使用“indicator=True”,它将为您创建一个名为“_merge”的新列,该列将指示每一行的来源。
现在,当您合并数据时,您可以制作简单的条件语句来获取所有需要的列,例如:
merged_df.loc[(merged_df[0] >= merged_df['s']) & (merged_df[1] >= merged_df ['e'])]
或者,您可以使用 apply 等添加一个新列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.