file1:
col0 col1 col2 col3
1 20 10 -
1 25 30 +
2 50 40 -
2 60 70 +
file2的:
col0 col1 col2 col3 col4 col5
1 25 5 - e1 e2
1 20 30 + e4 e24
2 45 35 - e9 e12
2 55 75 + e10 e21
我需要检查3个条件: 1)检查col0中的元素是否相同(1 == 1)
2)如果是,则检查col3是否为 - 或+,如果 - 那么col1值将高于col2,如果是+,则检查相反,
3)检查范围是否在文件2的col1和col2之内,即 如果满足所有条件,则第二行25-30落在20-30范围内,将文件1中的行和文件2中的col4和col5放入(这是一些元信息)
col0 col1 col2 col3 col4 col5
1 20 10 - e1 e2
1 25 30 + e4 e24
2 50 40 - e9 e12
2 60 70 + e10 e21
简单的python代码会有这样的条件
for i in file1:
for j in file2:
if i[1]<j[1] and i[2]<j[2] and i[0]==j[0]:
print j
不知道如何解释这个标志,我怎么能用熊猫来实现这个目标,或者熊猫不是一个正确的方法?
答案 0 :(得分:1)
这是一种方法:
生成OP提供的样本数据
# copy file1 data from OP, then run:
df1 = pd.read_clipboard().reset_index()
# copy file2 data from OP, then run:
df2 = pd.read_clipboard().reset_index()
合并并过滤数据
# merge data on row index and col0 value
df3 = (df1.merge(df2.drop('col3',1), on=['index','col0'], suffixes=('_1','_2'))
.drop('index',1))
# sort range cols from file2
df3[['col1_2','col2_2']] = df3[['col1_2','col2_2']].apply(sorted, axis='columns')
# filter based on file1 range within file2 range, drop extra cols
df3 = (df3.loc[df3.col1_1.between(df3.col1_2, df3.col2_2) & df3.col2_1.between(df3.col1_2, df3.col2_2)]
.drop(['col1_2','col2_2'], 1))
print(df3)
<强>输出强>
col0 col1_1 col2_1 col3 col4 col5
0 1 20 10 - e1 e2
1 1 25 30 + e4 e24
3 2 60 70 + e10 e21