Pandas:两个大小不同但值相似的数据框。当 df1 具有相似的值时,我需要来自 df2 的数据

曼克斯

我有一个数据帧,其间隔比另一个包含我需要的其他信息的数据帧小。

以下是将输入的结果的示例

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映射Datadf2df1

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何根据 df2 中两列的日期范围值之间的 df1 中的日期在单独的数据框 (df2) 中查找数据

如何组合两个数据帧 df1 和 df2 保留来自 df2 的公共列

从文件夹中的所有数据中减去 df1 从 df2、df2 从 df3 等等

pandas 如何从 df2 获取 df1 的值,而 df1 和 df2 的值在列上重叠

从 DF2 替换 DF1 中的值

我有两个数据帧DF1和DF2,在特定索引处追加从DF2到DF1有条件的行的最佳方法是什么?

将df1列中值的两个数据帧合并为df2和df1列中逗号分隔的值.Column2 = df2.Column2

如果两个不同数据框中两列的值匹配,则将 df2 中另一列的值复制到 df1 中的列

比较两个数据帧中的列并删除df2中值在df1中+/- 0.03以内的行

将df1列中值的两个数据帧合并为df2列中逗号分隔的值

通过调用df2中列出的df1索引来创建数据框

仅当df2中的列中的值位于df1中时,才将2个数据帧附加在一起

根据2个数据帧(df1,df2)之间的匹配列更新一个DF(df1)的行

如何从具有不同行和列索引的 df2 创建 df1?

关于联接2个数据帧的指南,以使df2的每一行成为df1的整个列,并在df2的所有行上进行迭代

如何使用另一个 df2 列的所有单行检查 df1 行以检查数据帧中是否相同

在 df1 中设置与 df2 中的值匹配的值

组合 df1 中的值对应于 df2 中的值的行

从df2中提取与df1的两列信息匹配的所有行

将df2中随机选择的值与df1合并

如果列值不在df2列中,则获取df1的行

反向代码以df2中的查找值为条件选择df1中的vars

Python-检查df2列中是否存在df1列中的值

如果 df2 中的 loc 为 True,则 df1 中的 python 总和值

df1 的 xy 列的值是否也出现在 df2 的 zy 列中?

如果找到匹配项,则比较两个不同数据框中的列,将电子邮件从df2复制到df1

根据两个相似的df之间的对比创建一个新的数据框

根据df1上的条件创建pd系列,并报告df2或df3中的值

我可以使用df1中的一列和df2中的单元格中的任何值之一来连接两个数据帧吗?