【发布时间】:2021-10-14 00:41:17
【问题描述】:
我的问题是这个问题的延伸:
Check if value in a dataframe is between two values in another dataframe
df1
df1_Col df1_start
0 A1 1200
1 B2 4000
2 B2 2500
df2
df2_Col df2_start df2_end data
0 A1 1000 2000 DATA_A1
1 A1 900 1500 DATA_A1_A1
**2 A1 2000 3000 DATA_A1_A1_A1**
2 B1 2000 3000 DATA_B1
3 B2 2000 3000 DATA_B2
输出:
df1_Col df1_start data
0 A1 1200 DATA_A1;DATA_A1_A1
1 B2 4000
2 B2 2500 DATA_B2
我将df1_Col 的值与df2_Col 和df1_start 进行比较,使其在df2_start 和df2_end 的范围内,然后在df1 中添加data 列的值。如果有多个匹配项,则 data 可以与任何分隔符组合,例如 ';'。
代码如下:
for v,ch in zip(df1.df1_start, df1.df1_Col):
df3 = df2[(df2['df2_start'] < v) & (df2['df2_end'] > v) & (df2['df2_Col'] ==ch)]
data = df3['data']
df1['data'] = data
使用循环是因为文件很大。
期待您的帮助。
【问题讨论】:
-
为什么在预期输出中得到 4000,它不在 df2_start 和 df2_end 之间?
-
因为它是 df1 的一部分,并将列
data附加到 df1。它可以是空白或破折号,表示该行没有任何匹配项。 -
我认为这应该是
1200,而不是df1_start中的1000 -
@AnuragDabas:已编辑,谢谢。
标签: python pandas dataframe append