Pandas 数据帧之间的匹配间隔
我有两个数据帧。第一个(文件_1),包含一个ID列和深度from和depth toPandas 数据帧之间的匹配间隔,pandas,dataframe,intervals,matching,Pandas,Dataframe,Intervals,Matching,我有两个数据帧。第一个(文件_1),包含一个ID列和深度from和depth to ID Depth_From Depth_To 0 HLD032 611.10 612.00 1 HLD032 612.00 612.20 2 HLD032 612.20 614.80 3 HLD032 614.80 616.20 4 HLD032
ID Depth_From Depth_To
0 HLD032 611.10 612.00
1 HLD032 612.00 612.20
2 HLD032 612.20 614.80
3 HLD032 614.80 616.20
4 HLD032 616.20 617.80
... ... ... ...
10082 HLD650 594.80 596.50
10083 HLD650 596.50 597.40
10084 HLD650 597.40 598.10
第二个数据帧(文件_2),包含一个ID列、从和到的深度以及一些参数(填充、粗糙度、厚度)
我需要的是为第二个数据帧(文件2)中的每个ID和文件1的每个间隔(深度从,深度到)创建对应参数(填充,粗糙度,厚度)的匹配
由于每个参数的多个值将对应于每个间隔,因此我需要一个类似
ID Depth_From Depth_To Infill Roughness Thickness
0 HLD032 611.10 612.00 Qtz, Qtz, Qtz R,R,R,K 0.3,0.10.5
1 HLD032 681.37 681.371 Qtz, Chl,Chl S,R,R 0.1.0.2,0.5
2 HLD032 681.50 681.501 Qtz,Btz,Lm R,Y,Y 0.5,3,1
有人能帮助我吗?希望您能利用我创建的数据利用此解决方案:
import pandas as pd
df1 = pd.DataFrame({'ID': [1, 1, 1, 1, 2, 2, 2, 2],
'From': [1, 3, 5, 7, 1, 2, 3, 4],
'To': [4, 6, 6, 9, 3, 4, 7, 6]})
df2 = pd.DataFrame({'ID': [1, 1, 2],
'From': [3, 5, 5],
'To': [4, 6, 6],
'Value': [5,10,15]})
df1['Value'] = df1.apply(lambda x: ', '.join(df2.loc[(df2['ID']==x['ID'])& \
(df2['From']>=x['From'])& \
(df2['To']<=x['To']), 'Value'].astype(str).tolist()), axis=1)
df1
# From ID To Value
#0 1 1 4 5
#1 3 1 6 5, 10
#2 5 1 6 10
#3 7 1 9
#4 1 2 3
#5 2 2 4
#6 3 2 7 15
#7 4 2 6 15
将熊猫作为pd导入
df1=pd.DataFrame({'ID':[1,1,1,2,2,2],
'From':[1,3,5,7,1,2,3,4],
‘To’:[4,6,6,9,3,4,7,6]})
df2=pd.DataFrame({'ID':[1,1,2],
'From':[3,5,5],
“To”:[4,6,6],
“值”:[5,10,15]})
df1['Value']=df1.apply(lambda x:','.join(df2.loc[(df2['ID']==x['ID'])和\
(df2['From']>=x['From'])和\
(df2['To']你好?有人有兴趣帮我吗?谢谢:)谢谢zipa。当我在let you know@Tani84回家时,我会试一试。不客气,这个原则应该适合你,尽管必须有一个更好的解决方案speed-wisePerfect。它很有效。只是另一个调整。如果我想在列表中选择一个特定的值。在你的例子中,在5到10之间,我希望该值为10
import pandas as pd
df1 = pd.DataFrame({'ID': [1, 1, 1, 1, 2, 2, 2, 2],
'From': [1, 3, 5, 7, 1, 2, 3, 4],
'To': [4, 6, 6, 9, 3, 4, 7, 6]})
df2 = pd.DataFrame({'ID': [1, 1, 2],
'From': [3, 5, 5],
'To': [4, 6, 6],
'Value': [5,10,15]})
df1['Value'] = df1.apply(lambda x: ', '.join(df2.loc[(df2['ID']==x['ID'])& \
(df2['From']>=x['From'])& \
(df2['To']<=x['To']), 'Value'].astype(str).tolist()), axis=1)
df1
# From ID To Value
#0 1 1 4 5
#1 3 1 6 5, 10
#2 5 1 6 10
#3 7 1 9
#4 1 2 3
#5 2 2 4
#6 3 2 7 15
#7 4 2 6 15