我有两个数据帧 . 我的第一个数据框有两列,我想用它来创建一个条件并从第二个数据帧返回一个值 .
df1 = (['a', 'a', 'b', 'c'], [0.4, 0.9, 0.1, 0.6])
df2 = (['a', 'a', 'b', 'b', 'c', 'c'], [0.2, 0.6, 0.3, 0.8, 0.1, 0.4],
[500, 200, 900, 400, 250, 800])
对于df1中的每一行,我想通过两列数据查找df2 . 第一个条件是将df1中的字母与df2匹配 . 第二个条件是在df2中查找第一个数字行,其中数字大于df1 . 如果没有更大的数字,请取df2中与该字母匹配的第一行 .
我的目标输出是:
-
df1 row [0] = 500#'a'匹配'a'&0.4大于0.2
-
df1 row [1] = 200#'a'匹配'a'&0.9大于0.6
-
df1 row [2] = 900#'b'匹配'b'&没有行大于0.1所以返回第'b'行
-
df1 row [3] = 800#'c'匹配'c'&0.6大于0.4
对于我的问题任何不良格式的道歉,请提供有关发布的任何建议(这是我的第一个) .
非常感谢!
2 回答
我认为更好的是避免迭代 .
我将
df1
和df2
中的数据合并为a
列 . 输出的行数比原始df1
多两倍 . 然后条件由np.where应用,输出转换为整数 . 系列s
包含输出,每个奇数值 . (因为合并了df1
中的一行和df2
中的两行)迭代解决方案(Delforge):
合并解决方案(我):
您可以迭代df1并根据列0字母和大于两列之间的比较进行选择1.假设您的列1值是升序,如果所选数据帧不为空,则存储列2的最后一个值 . 如果为空获取与列0选择匹配的df2 col 2的第一个值 .
这是一个例子,我将结果存储在一个字典中 .
例:
你的数据
迭代: