python - pandas DataFrame 上的区间查找
问题描述
有两个数据框,df_A
并且df_B
df_A
Out[61]:
A B
0 1 10
1 2 60
2 3 40
df_B
Out[62]:
A B D
0 1 5 10
1 1 10 25
2 1 20 60
3 2 5 10
4 2 10 25
5 2 20 60
6 3 10 20
7 3 15 40
8 3 25 80
现在我需要在列上左加入df_A
和,棘手的部分是要考虑如下df_B
A
B
df_B
df_B
Out[64]:
A B D
0 1 [5,10) 10
1 1 [10,20) 25
2 1 [20:) 60
3 2 [5,10) 10
4 2 [10,20) 25
5 2 [20:) 60
6 3 [10,15) 20
7 3 [15,25) 40
8 3 [25:) 80
因此对于B
大于等于 5 且小于 10 的值,应在以下情况下返回值 '10'df_A['A'] == 1
我的输出数据框应该是这样的
df_C
Out[66]:
A B D
0 1 10 25
1 2 60 60
2 3 40 80
解决方案
我确信有更多的熊猫/矢量化方式可以做到这一点,但这里有一个选项:
C = []
for A, B in zip(df_A['A'],df_A['B']):
idx = ((df_B[df_B['A']==A]['B'] > B).cumsum() == 0).sum() - 1
C.append(df_B[df_B['A']==A].iloc[idx,-1])
df_C = df_A.copy(deep=True).assign(C=C)
现在
>>> df_C
A B C
0 1 10 25
1 2 60 60
2 3 40 80
推荐阅读
- android - 如何在不引用它的情况下删除 firebase 事件侦听器?
- c - 在 C++ 中无状态地包装 C 回调接口
- c++ - 如何清除/清空已经打开 C++ 的文件
- javascript - 为什么一个 Firebase 函数被 CORS 阻止了?
- python - 具有一个索引的对象不可迭代
- python - 请求 Python 代码生成多元正态以外的多元分布
- c++ - 从具有按值捕获的 lambda 移动构造 std::function 时调用了两次移动构造函数
- python - 将 K 折验证应用于文本分类
- excel - 我无法多次添加到工作簿类以实例化
- docker - 当我拉一些图像时,我得到“下载失败:未知 blob”