我有一个数据帧,其间隔比另一个包含我需要的其他信息的数据帧小。
以下是将输入的结果的示例
df1
Labels Interval
0 A1 1
1 A1 2
2 A1 3
3 A1 4
4 A2 1
5 A2 2
6 A2 3
7 A2 4
df2
Labels From To Data
0 A1 0 2 103
1 A1 2 4 110
2 A2 0 2 110
3 A2 2 4 103
我需要从 df2 在数据框 df1 中创建新列(数据)
df1
Labels Interval Data
0 A1 1 103
1 A1 2 103
2 A1 3 110
3 A1 4 110
4 A2 1 110
5 A2 2 110
6 A2 3 103
7 A2 4 103
我试过使用 np.where 和 df.loc 函数,但因为它们的大小不同,所以它并没有真正起作用。我现在正在尝试做一个 for 循环,但是整个数据集的代码需要很长时间。
df1['Data'] =np.where((df1['Interval'] <= df2['To']) & (df1['Interval'] >= df2['From']) & (df1['Labels'] == df2['Labels']),df2['Data'],'NA')
编辑**
我还应该补充一点,在这种情况下,间隔和来自/到项目是连续的,但在实际数据集中有 0.5 和增量,我认为这使得映射数据变得困难,这就是为什么我想使用 < 和> 功能。
我们可以IntervalIndex
从列From
和创建一个To
,然后使用MultiIndex.map
映射Data
从df2
到df1
i = pd.IntervalIndex.from_arrays(df2['From'], df2['To'])
df1['Data'] = df1.set_index(['Labels', 'Interval']).index\
.map(df2.set_index(['Labels', i])['Data'])
Labels Interval Data
0 A1 1 103
1 A1 2 103
2 A1 3 110
3 A1 4 110
4 A2 1 110
5 A2 2 110
6 A2 3 103
7 A2 4 103
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句