在熊猫DataFrame上进行间隔查找

时间:2018-08-17 08:49:33

标签: python pandas

有两个数据帧,var myChart = new Chart(ctx, { type: 'line', data: { labels: labels, datasets: [ { label: 'Q1', borderColor: colorQ1, borderWidth: 2, backgroundColor: colorQ1, data: dataQ1, fill: 'start', lineTension: 0, pointRadius: 0, }, ... ] }, options: { elements: { point: { radius: 0 } }, maintainAspectRatio: false, legend: { display: false }, tooltips: { callbacks: { title: function() {}, label: function(item, data) { if (item.datasetIndex == 5 || item.datasetIndex == 0) { return null; } return ' ' + addCommas(Math.ceil(item.yLabel)) + ' €'; } }, itemSort: function(a, b) { return b.datasetIndex - a.datasetIndex }, intersect: false, mode: 'label', } }, }); 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_BA处加入连接,棘手的部分是B,应考虑如下< / p>

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 大于等于5且小于10的值,当B时应返回值'10'

我的输出数据框应该是这样的

df_A['A'] == 1

1 个答案:

答案 0 :(得分:0)

我敢肯定还有更多的熊猫/矢量化方法可以做到这一点,但这是一个选择:

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